Selenium 2自动化测试实战6(异常)
一、异常
python用异常队形(exception object)来表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理和捕捉,则程序就会用所谓的回溯(Traceback,一种错误信息)来终止执行。
1.认识异常
如下图所示,程序在执行时所抛出的异常。

通过open()方法以读"r"的方式打开一个abc.txt的文件。然后python抛出一个IOError类型的异常。可以通过Python所提供的try...except...语句来接收并处理这个异常。如下图所示

修改一下此代码,使其打印一个没有定义的变量,代码及其输出如下图所示

如上图所示,错误又出现了,但是此时抛出的异常是一个NameError异常,将“except IOError”修改为“except NameError”即可

知识延伸:
异常的抛出机制:
1.如果在运行时发生异常,则解释器会查找相应的处理语句(称为handler)。 2.如果在当前函数里没有找到的话,则它会将异常传递给上层的调用函数,看看那里能不能处理。 3.如果在最外层(全局“main”)还是没有找到的话,那么解释器就会退出,同时打印出Traceback,以便让用户找到错误产生的原因。 注意:虽然大多数错误会导致异常,但异常不一定代表错误,有时候他们只是一个警告,有时候是一个终止信号,例如退出循环等。 在python中所有的异常类都继承Exception,所以可以使用它来接收所有类型的异常。

从python2.5版本之后,所有的异常类都有了新的基类BaseException,Exception同样也继承自BaseException,所以也可以使用BaseException来接收所有类型的异常。

上图例子中,只要其中一行出现了异常就会print()异常信息,所以我们并不能准确地知道到底哪一行代码引起了异常。
所以修改一下代码,如下图所示

上例中,在BaseException后面定义看msg变量用于接收异常信息,并通过print将其打印出来。
python中常见的异常如表3.1所示

2.更多异常用法
try....except....与 else 配合使用:

对aa变量进行了赋值,所以没有异常将会执行 else 语句后面的内容。通常 else 语句只有在没有异常的情况下才会被执行,如下图所示,有异常则不会执行 else 语句。

但有些情况下不管是否出现异常,这些操作都希望能被执行,则此时可以使用 try...except...finally....语句来实现这样的需求

修改代码,定义aa变量

对比两次的执行结果,就可以理解了finally语句的作用
3.抛出异常
print()方法只能打印错误信息,python 中提供了 raise 方法来抛出一个异常信息。
from random import randint #生成一个1到9之间的随机整数
number = randint(1,9)
if number % 2 == 0:
raise NameError("%d is even " % number)
else:
raise NameError("%d is odd"%number)
输出结果如下图所示

通过randint()方法随机生成 1 到 9 之间的整数,然后判断这个数字是奇数还是偶数,最后通过 raise 抛出 NameError异常。其实,判断奇偶数与NameError之间没有任何关系,这里只是为了演示如何通过 raise 抛出各种类型的异常。
注意:raise 只能使用 python 中所提供的异常类,如果自定义一个 abcError 的异常,则 python 会告诉你 abcError 没有定义。
Selenium 2自动化测试实战6(异常)的更多相关文章
- Selenium 2自动化测试实战
Selenium 2自动化测试实战 百度网盘 链接:https://pan.baidu.com/s/1aiP3d8Y1QlcHD3fAlEj4sg 提取码:jp8e 复制这段内容后打开百度网盘手机Ap ...
- Selenium 2自动化测试实战3(函数、类和方法)
一.函数.类和方法1.函数在python中通过def关键字来定义函数 创建一个add()函数,此函数接收两个参数a,b,通过print()打印a+b的结果.调用add()函数,并且上传两个参数3,5给 ...
- 《Selenium 2自动化测试实战 基于Python语言》中发送最新邮件无内容问题的解决方法
虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动 ...
- Selenium 与自动化测试 —— 《Selenium 2 自动化测试实战》读书笔记
背景 最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试&自动化测试的理论知识,遂拿过来学习学习.所以本文几乎没有实践内容,大多都是概念和工 ...
- Selenium+Python自动化测试实战(2)元素定位
1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事, ...
- Selenium 2自动化测试实战39(Page Object设计模式)
Page Object设计模式 Page object是selenium自动化测试项目开发时间的最佳设计模式之一,主要体现在对界面交互细节的封装. 1.认识page object优点如下:1.减少代码 ...
- Selenium 2自动化测试实战35(HTML测试报告)
HTML测试报告 显然,一份漂亮的测试报告展示自动化测试成果只有一个简单的log文件是不够的.HTMLTestRunner是python标准库unittest单元测试框架的一个扩展,它生成易于使用的H ...
- Selenium 2自动化测试实战34(编写Web测试用例)
编写Web测试用例 1.介绍了unittest单元测试框架,其主要是来运行Web自动化测试脚本.简单的规划一下测试目录:web_demo1/------test_case/------------te ...
- Selenium 2自动化测试实战33(带unittest的脚本分析)
带unittest的脚本分析 #test.py #coding:utf-8 from selenium import webdriver from selenium.webdriver.common. ...
随机推荐
- c++ 初学者的画图库EasyX
EasyX 什么是easyx? EasyX 是针对 C++ 的图形库,可以帮助 C++语言初学者快速上手图形和游戏编程.其实就是c++的一个图形库让初学者不用只在控制台输出代码,而是在图形界面进行开发 ...
- PAT Basic 1007 素数对猜想 (20 分)
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数.显然有d1=1,且对于n>1有dn是偶数.“素数对猜想”认为“存在无穷多对相邻且差为2的素 ...
- SQL truncate 、delete与drop区别(转)
相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1. t ...
- python出现Non-ASCII character '\xe6' in file statistics.py on line 19, but no encoding declared错误
可按照错误建议网址查看http://www.python.org/peps/pep-0263.html 发现是因为Python在默认状态下不支持源文件中的编码所致.解决方案有如下三种: 一.在文件头部 ...
- MyEclipse 2016 反编译插件安装
下载插件,分享一下下载插件的地址,百度网盘:链接:http://pan.baidu.com/s/1nturiAH 密码:yk73 1.把net.sf.jadclipse_3.3.0.jar拷到D:\P ...
- Kubernetes 编排神器之 Helm
什么是Kubernetes Helm?为什么要使用Helm? 前言 编写一堆Kubernetes配置文件是一件很麻烦的事情.对于一些容器,我们可能需要10多个yaml文件.维护它们是一个问题,而且在不 ...
- BZOJ3555 [Ctsc2014]企鹅QQ[暴力+字符串hash]
菜到自闭,一道省选小水题都能给我做繁. 要求有一位不同,则对每个串每一位暴力枚举把这一位删掉,放一个分隔符,算一下hash,插表,相似的都应该会被插入同一个桶.最后把hash统计一下即可.复杂度$O( ...
- MySQL显示ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)解决方法
MySQL显示ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)解决方法 2.4K 解决方法: 第一步cd ...
- "main" java.io.IOException: Mkdirs failed to create /user/centos/hbase-staging (exists=false, cwd=file:/home/centos)
Exception in thread "main" java.io.IOException: Mkdirs failed to create /user/centos/hbase ...
- Redis——SpringBoot项目使用Lettuce和Jedis接入Redis集群
Jedis连接Redis: 非线程安全 如果是多线程环境下共用一个Jedis连接池,会产生线程安全问题,可以通过创建多个Jedis实例来解决,但是创建许多socket会影响性能,因此好一点的方法是使用 ...