python中exception⽅法_Python常⽤异常及处理⽅法Python 异常处理
python提供了两个⾮常重要的功能来处理python程序在运⾏中出现的异常和错误。你可以使⽤该功能来调试python程序。
异常处理: 本站Python教程会具体介绍。
断⾔(Assertions):本站Python教程会具体介绍。
python标准异常
异常名称描述
BaseException
所有异常的基类
SystemExit
解释器请求退出
KeyboardInterrupt
⽤户中断执⾏(通常是输⼊^C)
Exception
常规错误的基类
StopIteration
迭代器没有更多的值
GeneratorExit
⽣成器(generator)发⽣异常来通知退出
StandardError
所有的内建标准异常的基类
ArithmeticError
所有数值计算错误的基类
FloatingPointError
浮点计算错误
OverflowError
数值运算超出最⼤限制
ZeroDivisionError
除(或取模)零 (所有数据类型)
AssertionError
断⾔语句失败
AttributeError
对象没有这个属性
EOFError
没有内建输⼊,到达EOF 标记
EnvironmentError
操作系统错误的基类
IOError
输⼊/输出操作失败
OSError
操作系统错误
WindowsError
系统调⽤失败
ImportError
导⼊模块/对象失败
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⽆法正常处理程序时就会发⽣⼀个异常。
异常是Python对象,表⽰⼀个错误。
当Python脚本发⽣异常时我们需要捕获处理它,否则程序会终⽌执⾏。
异常处理
捕捉异常可以使⽤try/except语句。
try/except语句⽤来检测try语句块中的错误,从⽽让except语句捕获异常信息并处理。
如果你不想在异常发⽣时结束你的程序,只需在try⾥捕获它。
语法:
以下为简单的lse的语法:
try:<;语句>#运⾏别的代码except<;名字>:<;语句>#如果在try部份引发了'name'异常except<;名字>,<;数据>:<;语句>#如果引发了'name'异常,获得附加的数据else:<;语句>#如果没有异常发⽣
try的⼯作原理是,当开始⼀个try语句后,python就在当前程序的上下⽂中作标记,这样当异常出现时就可以回到这⾥,try⼦句先执⾏,接下来会发⽣什么依赖于执⾏时是否出现异常。
如果当try后的语句执⾏时发⽣异常,python就跳回到try并执⾏第⼀个匹配该异常的except⼦句,异常
处理完毕,控制流就通过整个try语句(除⾮在处理异常时⼜引发新的异常)。
如果在try后的语句⾥发⽣了异常,却没有匹配的except⼦句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
如果在try⼦句执⾏时没有发⽣异常,python将执⾏else语句后的语句(如果有else的话),然后控制流通过整个try语句。
实例
下⾯是简单的例⼦,它打开⼀个⽂件,在该⽂件中的内容写⼊内容,且并未发⽣异常:
#!/usr/bin/python# -*- coding: UTF-8 -*-try:fh =open("testfile","w")fh.write("这是⼀个测试⽂件,⽤于测试异
常!!")exceptIOError:print"Error: 没有到⽂件或读取⽂件失败"else:print"内容写⼊⽂件成功"fh.close()
以上程序输出结果:
$ python test.py
内容写⼊⽂件成功$ cat testfile # 查看写⼊的内容这是⼀个测试⽂件,⽤于测试异常!!
实例
下⾯是简单的例⼦,它打开⼀个⽂件,在该⽂件中的内容写⼊内容,但⽂件没有写⼊权限,发⽣了异常:
#!/usr/bin/python# -*- coding: UTF-8 -*-try:fh =open("testfile","w")fh.write("这是⼀个测试⽂件,⽤于测试异
常!!")exceptIOError:print"Error: 没有到⽂件或读取⽂件失败"else:print"内容写⼊⽂件成功"fh.close()
在执⾏代码前为了测试⽅便,我们可以先去掉 testfile ⽂件的写权限,命令如下:
chmod -w testfile
再执⾏以上代码:
$ python test.py
Error:没有到⽂件或读取⽂件失败
使⽤except⽽不带任何异常类型
你可以不带任何异常类型使⽤except,如下实例:
try:正常的操作......................except:发⽣异常,执⾏这块代码......................else:如果没有异常执⾏这块代码
以上⽅式try-except语句捕获所有发⽣的异常。但这不是⼀个很好的⽅式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常。
使⽤except⽽带多种异常类型
你也可以使⽤相同的except语句来处理多个异常信息,如下所⽰:
try:正常的操作......................except(Exception1[,Exception2[,...ExceptionN]]]):发⽣以上多个异常中的⼀个,执⾏这块代码......................else:如果没有异常执⾏这块代码
try-finally 语句
try-finally 语句⽆论是否发⽣异常都将执⾏最后的代码。
try:<;语句>finally:<;语句>#退出try时总会执⾏raise
实例
#!/usr/bin/python# -*- coding: UTF-8 -*-try:fh =open("testfile","w")fh.write("这是⼀个测试⽂件,⽤于测试异
常!!")finally:print"Error: 没有到⽂件或读取⽂件失败"
如果打开的⽂件没有可写权限,输出如下所⽰:
$ python test.py
Error:没有到⽂件或读取⽂件失败
同样的例⼦也可以写成如下⽅式:
#!/usr/bin/python# -*- coding: UTF-8 -*-try:fh =open("testfile","w")try:fh.write("这是⼀个测试⽂件,⽤于测试异
常!!")finally:print"关闭⽂件"fh.close()exceptIOError:print"Error: 没有到⽂件或读取⽂件失败"
当在try块中抛出⼀个异常,⽴即执⾏finally块代码。
finally块中的所有语句执⾏后,异常被再次触发,并执⾏except块代码。
参数的内容不同于异常。
异常的参数
⼀个异常可以带上参数,可作为输出的异常信息参数。
你可以通过except语句来捕获异常的参数,如下所⽰:
try:正常的操作......................exceptExceptionType,Argument:你可以在这输出Argument的值...
变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收⼀个或者多个值。
元组通常包含错误字符串,错误数字,错误位置。
实例
python怎么读取py文件以下为单个异常的实例:
#!/usr/bin/python# -*- coding: UTF-8 -*-# 定义函数
deftemp_convert(var):try:returnint(var)exceptValueError,Argument:print"参数没有包含数字\n",Argument# 调⽤函数
temp_convert("xyz");
以上程序执⾏结果如下:
$ python test.py
参数没有包含数字invalid literal forint()withbase10:'xyz'
触发异常
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论