异常处理
简介
在我们写程序代码的时候,往往会因一个小问题让我们整个程序直接挂掉。
异常处理对我们测试有什么好处,相信做过自动化的同学都知道我们的用例都是一条一条的去执行比如我们程序用例几百条,有一条用例因数据原因导致了程序异常,那么剩下的就会全体停止工作,遇到这样的情况我们应该将这个数据导致的问题抛出来,处理这个异常就可以了。
我们可以使用 tryexcept 的方式来处理异常。
结构
将有可能发生报错的语句放到try:里面,然后使用except来处理异常,每一个try 必须至少有1个except。
如果可能发生报错的语句我们能知道要报哪些异常,except 后需要跟上异常名称
也可以使用万能异常Exception,他可以捕获任意异常
python所有的标准异常类:请看文章末尾处
实例1:处理指定错误异常类型
如果我们知道会报那些错误,那么就可以直接来捕捉处理就好了,但是如果捕捉异常名称不正确,则也会程序报错。
首先我们打印一个未声明/初始化对象 (没有属性)的错误,然后再后面再打印一个正常能被执行的数据
1
2
|
print (aa)
print ( 'bb' )
|
打印结果
Traceback (most recent call last):
File "C:\Users\张天赐\PycharmProjects\pythonProject\test\lianxi\111.py", line 6, in <module>
print(a)
NameError: name 'a' is not defined
显然print("bb")没有被执行,我们此时对我们可能或者已知报错的部分增加try:并且用except 指定NameError as 到f变量,并且打印出这个错误
1
2
3
4
5
|
try :
print (aa)
except NameError as f:
print (f)
print ( 'bb' )
|
打印结果
name 'aa' is not defined
bb
可以看出,程序将报错信息打印了出来,然后执行了print("bb")
假如我是打开一个错误的文件呢?我又不知道打开文件错误的名称,这时候我又怎么处理呢?
1
2
3
4
5
|
try :
open ( 'ztc.txt' , 'r' )
except NameError as f:
print (f)
print ( 'bb' )
|
打印结果:
实际是输出错误文件,我用Nameerror是不能正确找到该异常名称的
1
2
3
4
|
Traceback (most recent call last):
File "C:\Users\张天赐\PycharmProjects\pythonProject\test\lianxi\111.py" , line 2 , in <module>
open ( 'ztc.txt' , 'r' )
FileNotFoundError: [Errno 2 ] No such file or directory: 'ztc.txt'
|
遇到这样的情况请看实例2
实例2 :万能的异常处理
实例1中我们说了,在我们能确定会报什么类型的错误的时候,我们可以指定这个错误类型来处理他,当然在很多时候,我们会遇到很多的未知异常,不可能将所有异常都预知到,那么我们可以直接用万能异常Exception
1
2
3
4
5
|
try :
open ( 'ztc.txt' , 'r' )
except Exception as f:
print (f)
print ( 'bb' )
|
打印结果:
无论我们try中是任何错误类型的异常,exception都可以来处理他
[Errno 2] No such file or directory: 'ztc.txt'
bb
实例3:try...finally...
try...finally...的意思是,我们程序是否遇到错误,这些代码必须执行
都有哪些场景可以用到?
比如我们链接数据库,要操作数据库,程序报错了或者没报错, 都必须要执行关闭数据库
比如我们打开一个excel或者txt文档,要写入数据,无论报错或者没报错,都必须关闭这个文档
先看一个执行正常的情况
1
2
3
4
5
6
|
try :
f = open ( 'ztc.json' , 'r' )
finally :
f.close()
print ( '已经关闭' )
|
打印结果
已经关闭
再看看如果打开文件后,还没等文件关闭呢,就报错了
1
2
3
4
5
6
7
|
try :
f = open ( 'ztc.json' , 'r' )
print (aaa)
finally :
f.close()
print ( '已经关闭' )
|
打印结果
Traceback (most recent call last):
File "C:\Users\张天赐\PycharmProjects\pythonProject\test\lianxi\111.py", line 3, in <module>
print(aaa)
NameError: name 'aaa' is not defined
已经关闭
看上面代码,显然程序打印print(aaa)的时候报错了,但是依然将打开的文件给关闭了
附录:
异常名称 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
SystemExit | Python 解释器请求退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
到此这篇关于python异常处理try的文章就介绍到这了,更多相关python异常处理内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/ztcbug/p/15430560.html