十、异常
1. 处理异常
捕获异常语法:
try:
代码块(可能出现异常的语句)
execpt [error class] as [error name]:
代码块(出现异常执行的语句)
else:
代码块(程序正常运行时执行的语句)
finally:
代码块(无论是否出现异常都会执行)
print('代码执行之前')
try:
a = 10 / 0
except:
print('出现异常')
else:
print('没出现异常')
finally:
print('最终')
print('代码执行之后')
执行效果:
代码执行之前
出现异常
代码执行之后
2. 异常的传播
在函数中出现异常时,如果函数中对异常做了处理,则异常不会传播,若没处理,异常则会向函数调用出传播,直到传递到全局作用域。
使用
raise
关键字可以主动向外部抛出异常
def add(a, b):
if a < 0 or b < 0:
# raise用于向外部抛出异常,后边可以跟一个异常类,或者一个异常对象
raise Exception('传入参数不能小于0')
return a + b
add(100, -1)
执行效果:
3. 异常对象
当程序的运行过程中出现异常时,异常信息会保存在对应专门的异常对象中,如:
ZeroDivisionError
类的对象专门用来保存除0的异常;
NameError
类是处理变量错误的异常;` IndexError`索引异常等…
print('代码执行之前')
try:
# a = 10 / 0
# print(c)
1 + 'h'
except NameError:
print('出现 NameError 异常')
except ZeroDivisionError:
print('出现 ZeroDivisionError 异常')
except Exception as e:
print('未知的异常', e, type(e))
print('代码执行之后')
except
后面能指定捕获的异常Exception
是所有异常的父类,此处相当等于except:
,能捕获所有异常- 异常类后面可以使用
as xx
获取异常对象
4. 自定义异常对象
自定义异常需要继承
Exception
类
class AddException(Exception):
pass
def add(a, b):
if a < 0 or b < 0:
raise AddException('自定义异常:传入参数不能小于0')
return a + b
add(100, -1)
执行效果: