捕获错误
try:
#可能出错的代码
except 错误类型 as e:
#出错进行的代码
else:
#不出错才执行的代码
finally:
#无论是否出错都要进行的代码
错误有很多类型,可以有多个except捕获错误:
try:
#可能出错的代码
except 错误类型1 as e:
#出错进行的代码1
except 错误类型3 as e:
#出错进行的代码2
except 错误类型3 as e:
#出错进行的代码3
Python的错误其实也是class,所有的错误类型都继承自BaseException
,所以在使用except
时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。
Python常见的错误类型和继承关系
记录错误
使用logging
模块,打印错误信息
import logging
try:
10 / 0
except ZeroDivisionError as e:
logging.exception(e)
print("END")
运行结果:
ERROR:root:division by zero
Traceback (most recent call last):
File "finally.py", line 3, in <module>
10 / 0
ZeroDivisionError: division by zero
END
自定义错误
错误是一个class,可以选好继承关系自定义错误
#自定义一个FooError继承自ValueError
class FooError(ValueError):
pass
抛出错误
#raise抛出错误
raise 错误类型
另一种错误处理方式
def foo(s):
n = int(s)
if n==0:
raise ValueError('invalid value: %s' % s)
return 10 / n
def bar():
try:
foo('0')
#错误捕获之后,仅仅记录了下来,然后用raise抛出
except ValueError as e:
print('ValueError!')
raise
bar()
raise
不带参数,会把错误原样抛出
在excep
t中raise
一个Error,还可以把一种类型的错误转化成另一种类型:
try:
10 / 0
except ZeroDivisionError:
raise ValueError('input error!')
网友评论