Python是做自动化工作首选的一门语言,与更复杂的语言相比,Python 非常便于快速学习、语法很少,具有良好的 可读性,即使测试工程师们没有丰富的编码经验,也能快速学会;Python 的极简风格对于测试自动化具有诸多优势,测试步骤在本质上是呈线性的、一 次执行一个,按顺序执行,配合丰富的插件,非常适合测试脚本的开发。
本文主要介绍python中异常处理操作,包括异常及异常处理的概念、try/except/finally的使用及raise的使用。
一、python异常处理简介
1、python异常
python用异常对象(exception object)来表示异常情况,遇到错误后,会引发异常,如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
常见异常:
BaseException 所有异常的基类
KeyboardInterrupt 用户中断执行(通常是输入^C)
Exception 常规错误的基类
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AssertionError 断言语句失败BaseException 是 Exception 的父类,作为子类的Exception无法截获父类BaseException类型的错误。
2、异常处理捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
语法结构如下:
try:
#运行别的代码
except :
#如果在try部份引发了'name'异常
except ,:
#如果引发了'name'异常,获得附加的数据
else:
#如果没有异常发生
异常处理语法的工作原理是:当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印默认的出错信息)。
如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
二、异常处理的使用
1、try-except使用
案例1:主要处理被除数为0及列表索引越界异常的
try:
#此处是抛异常的
# a = 1/0
#此处是不抛异常的
# a = 1 / 2
#定义一个三个元素的列表
ll = [1,2,3]
print(ll[1])
print("我在异常之后")
#使用被除数为0的异常对象是抓不到索引越界异常的
# except ZeroDivisionError as z:
#可以使用Exception异常类的根类去抓
# except Exception as e:
# print("抓到了异常:",e)
#还有一种用法就是写多个except去抓
except ZeroDivisionError as z:
print("抓到了异常:",z)
except IndexError as i:
print("抓到了异常:",i)
finally:
print("不管你走的是try还是except语句,最后都要运行finally语句")
print("我是最后的代码")
print("我是最后的代码")
print("我是最后的代码")
print("我是最后的代码")
print("我是最后的代码")
案例2:文件写数据时候的使用
#没有提前准备testfile.log文件
try:
fh = open(r"e:\testfile.log", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print("Error: 没有找到文件或读取文件失败")
else:
print("内容写入文件成功")
fh.close()
=======输出结果==========
e盘根目录下自动创建文件testfile.log,并写入文字"这是一个测试文件,用于测试异常!!"
控制台输出:"内容写入文件成功"
案例3:文件读数据时候的使用
#没有提前准备testfile2.log文件
try:
fh = open(r"e:\testfile2.log", "r")
print(fh.read())
except IOError:
print("Error: 没有找到文件或读取文件失败")
else:
print("内容读取文件成功")
fh.close()
========输出结果==========
Error: 没有找到文件或读取文件失败
2、raise主动抛出异常
我们可以使用raise语句自己触发异常,一个异常可以是一个字符串,类或对象。
Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数,语法如下:
raise [Exception [, args [, traceback]]]语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
案例1:在指定位置直接抛出Exception异常
def functionName( level ):
if level < 1:
raise Exception("Invalid level!", level)
# 触发异常后,后面的代码就不会再执行
functionName(0)
=========输出结果==============
Exception: ('Invalid level!', 0)
3、用户自定义异常
通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
案例:自己定义异常类,通过try/except抓取该类进行处理。
class myException(Exception):
def __init__(self,errorcode,info):
self.errorcode = errorcode
self.info = info
try:
# raise myException('1001',"账户密码错误")
raise IndexError('1001',"索引越界异常")
except Exception as m:
print(m)
========输出结果===============
('1001', '账户密码错误')
欢迎关注作者,如果觉得写的还不错,就给点个赞同、喜欢、收藏(后续持续更新)。
【全文手打 如需转载 请标注此出处】