异常类
在python中,所以的异常类都是Exception的子类。Exception类定义在exceptions模块中,该模块在python的内建命名空间中,我们不必导入就可以直接使用
常见的异常
1、NameError
尝试访问一个未声明的变量,会引发该异常
2、ZeroDivisionError
当除数为0时,会引发该异常
3、SyntaxError
当解析器发现语法错误时,会引发该异常
4、IndexError
当使用序列中不存在的索引时,会引发该异常
5、KeyError
当使用字典中不存在的键访问值时,会引发该异常
6、FileNotFoundError
试图打开不存在的文件时,会引发该异常
7、AttributeError
当尝试访问未知的对象属性时,会引发该异常
异常处理
捕获简单异常
try:
#语句块
except 异常名称:
#异常处理代码
例:除数为0异常
try:
num1 = input("输入被除数:")
num2 = input("输入除数:")
print("结果:", float(num1)/float(num2))
except ZeroDivisionError:
print("除数不能为0")
捕获多个异常
try:
#语句块
except 异常名称1:
#异常处理代码
except 异常名称2:
#异常处理代码
........
例:
try:
num1 = input("输入被除数:")
num2 = input("输入除数:")
print("结果:", float(num1)/float(num2))
except ZeroDivisionError:
print("除数不能为0")
except ValueError:
print("只能输入数字")
捕获异常的描述信息
为了可以区分不同的错误信息,可以使用as获取系统反馈的错误信息
例:
try:
num1 = input("输入被除数:")
num2 = input("输入除数:")
print("结果:", float(num1)/float(num2))
except (ZeroDivisionError, ValueError) as result:
print("捕获到的异常:%s" % result)
当监控到ZeroDivisionError, ValueError两种异常中的任意一个时,将错误信息保存到result变量中
捕获所有异常
使用Exception代替特定的异常子类
例:
try:
num1 = input("输入被除数:")
num2 = input("输入除数:")
print("结果:", float(num1)/float(num2))
except Exception as result:
print("捕获到的异常:%s" % result)
没有捕获异常
try-except-else
例:
try:
num1 = input("输入被除数:")
num2 = input("输入除数:")
print("结果:", float(num1)/float(num2))
except Exception as result:
print("捕获到的异常:%s" % result)
else:
print("程序运行正确,未捕获到异常")
如果未捕获到异常则会执行else语句
else语句不能和没有except语句的异常处理结果配合使用
终止行为finally
在程序中有一种情况是,无论是否捕获到异常,都要执行一些终止行为,比如关闭文件、释放锁等,这时可以使用finally语句
抛出异常
raise语句
assert语句
自定义异常
预定义清理
with语句