Python中的异常类型及处理⽅式⽰例详解
⽬录
前⾔
正⽂
⼀、什么是异常
⼆、异常的类型
三、异常处理
四、try 介绍
五、finally 介绍
六、raise 介绍
结尾
前⾔
Python 是⼀种⾯向对象的、解释型的、通⽤的、开源的脚本编程语⾔。现在市⾯上 Python ⾮常的流⾏,主要是因为它简单易⽤,学习成本低,⽐如要实现某个功
能,Python 可能只需要⼏⾏代码,⽽⽤C语⾔可能需要上百⾏代码,因为C语⾔什么都要得从头开始编码,⽽ Python 已经内置了很多功能模块,所以,我们只需要导⼊特定的包,就可以实现想要的效果。
正⽂
今天,我们主要来了解⼀下 Python 中的异常类型以及它们的处理⽅式。说到异常处理,我们⾸先要知道什么是异常。其实,异常就是⼀类事件,当它们发⽣时,会影响到程序的正常执⾏。
⼀、什么是异常
其实,异常就是⼀类事件,当此类事件在程序执⾏过程中发⽣时,就会影响程序的正常执⾏。⼀般情况下,在 Python ⽆法正常处理程序时就会发⽣⼀个异常,⽽异常是Python 的⼀种对象类型,⽤来表⽰⼀个错误。当 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⽤户代码⽣成的警告
其实,在上述表格中列出的异常中,也具备⼀定的层次关系,我们可以通过下图来了解⼀下。
三、异常处理
在实际开发过程中,我们需要写出健壮性的程序,不希望我们的程序在执⾏过程中遇到了异常就⾃动终⽌。因此,我们需要处理程序执⾏过程中的异常事件,从⽽保证程序不会因为发⽣异常⽽终⽌。在编码过程中,我们可以简单使⽤ try/except 语句来捕捉异常,具体语法如下:
try:
<;语句> # 运⾏别的代码
except 异常类型:
<;语句> # 如果在try部份引发了异常
else:
<;语句> # 如果没有异常发⽣
熟悉 Java 的⼩伙伴都知道,在 Java 中是通过 atch 语句来捕获代码中的异常事件的,在 Python 中使⽤什么呢?
其实,在 Python 中是使⽤ pt 语句⽤来捕获异常,通过监视 try 语句块中的错误,从⽽让 except 语句捕获异常信息并进⾏处理。
因此,如果你不想在异常发⽣时结束你的程序,就需要在 try 语句块中捕获相应的异常。
接下来,我们通过⼀个代码实例来具体了解⼀下 pt 的⽤法。
代码实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
fh = open("", "r")
fh.write("这是⼀个测试⽂件,⽤于测试Python中的异常!")
except IOError:
print "Error: 写⼊⽂件失败"
else:
print "内容写⼊⽂件成功"
fh.close()
上述代码的意思是以可读模式打开⼀个 ⽂件,然后向⽂件中写⼊⼀段话:这是⼀个测试⽂件,⽤于测试Python中的异常! 因为⽂件是以可读模式打开的,所以没有写⼊权限,肯定会出错,但是因为是在 try 代码块中,肯定会被对应的IO错误类型捕获,并输⼊提⽰信息:Error:写⼊⽂件失败。
运⾏结果:
然后,我们修改代码,以写模式打开⽂件再写⼊对应的语句,修改后代码如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
fh = open("", "w")
fh.write("这是⼀个测试⽂件,⽤于测试Python中的异常!")
except IOError:
print "Error: 写⼊⽂件失败"
else:
print "内容写⼊⽂件成功"
fh.close()
这时,我们发现⽂件能够正常写⼊内容了,并且不会触发异常事件发⽣。
运⾏结果:
四、try 介绍
try 的⼯作原理是,当开始⼀个 try 语句后,python 就在当前程序的上下⽂中作标记,这样当异常出现时就可以回到这⾥,try ⼦句先执⾏,接下来会发⽣什么依赖于执⾏时是否出现异常。⼤致的情况可以分为两种,⼀种是触发了异常,另⼀种是没有触发异常,具体表现如下:
1. 如果当 try 后的代码⾥发⽣了异常,python 就跳回到 try 并执⾏第⼀个匹配该异常的 except ⼦句,异常处理完毕,控制流就通过整个 try 语句。
2. 如果在 try 后的代码⾥没有发⽣异常,python将执⾏else语句后的语句,然后控制流通过整个try语句。
其实,上⾯的代码实例很好的覆盖了这两种情况。
五、finally 介绍
finally 语句块中的内容,⽆论程序是否发⽣了异常都执⾏。这⼀点和 Java 是类似的,具体我们来看⼀段代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
fh = open("", "r")
fh.write("这是⼀个测试⽂件,⽤于测试Python中的异常!")
except IOError:
print "Error: 写⼊⽂件失败"
else:
print "内容写⼊⽂件成功"
fh.close()
finally:
print "异常发⽣了,执⾏finally代码块"
上述代码在原来的基础上增加了 finally 代码块,发⽣了异常,依然会执⾏ finally 代码块。同样,即使没有触发异常,也会执⾏相应的 finally 代码块。感兴趣的⼩伙伴可以⾃⼰动⼿试⼀下,这⾥就不演⽰了。
运⾏结果:
六、raise 介绍
在 Java 中,我们可以使⽤ throw 语句主动抛出异常,那么在 Python 中,是否也有类似的关键字呢?答案是肯定的。接下来,我们就来了解⼀下 raise 关键字。在编码过程中,我们可以使⽤ raise 语句主动触发异常。具体的语法可以参考如下格式:
raise [Exception [, args [, traceback]]]
需要注意的是语句中 Exception 是异常的类型(例如,IOError、OSError),参数标准异常中任意⼀种,参数 args 是⾃已提供的异常参数。最后⼀个参数 trackback 是可选的,⼀般为空。
实例代码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
fh = open("", "w")
fh.write("这是⼀个测试⽂件,⽤于测试Python中的异常!")
except IOError:
print "Error: 写⼊⽂件失败"
else:
print "内容写⼊⽂件成功"
try:
print "抛出⾃定义异常"
当前页面脚本发生错误raise Exception("这是⼀个⾃定义异常事件")
except:
print "⾃定义异常事件被捕获"
fh.close()
finally:
print "⾃定义异常发⽣了,执⾏finally代码块"
运⾏结果:
结尾
好了,今天关于 Python 的介绍就到这⾥吧,本⽂主要分享了 Python 中的异常类型以及异常发⽣时的处理⽅法,Python 简单易⽤,感兴趣的⼩伙可以⾃⼰试试呦!
到此这篇关于Python中的异常类型及处理⽅式的⽂章就介绍到这了,更多相关Python异常类型内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
发布评论