python 错误捕获:try...except...finally...
程序在运行的过程中,不可避免的总要出现错误,和其它语言一样,python提供了一套错误捕获机制:try...except...finally... 例如:
def division(x, y):
try:
result = x / y
return result
except ZeroDivisionError:
print('***************** y = ', y)
except TypeError:
print('************* 类型不对')
finally: #finally 始终会执行
print('end ...')
print(division(2, '3'))
上述事例中执行到: result = x / y 由于传入的y是字符串,(算术运算只是是int 或 float 类型) 则会执行except TypeError: 打印************* 类型不对 然后执行finally ,return result则不会执行。
抛出错误:因为错误本身是一个类,捕获一个错误就是捕获到该类的一个实例。Python的内置函数会抛出很多类型的错误,我们也可以自定义错误类型。
如果要抛出错误,首先根据需要,可以定义一个错误的类,选择好继承关系,然后,用raise语句抛出一个错误的实例,例如:
class Invalid(ValueError):
pass
def division(x, y):
try:
result = x / y
return result
except Exception as e:
raise Invalid('非法输入', y)
finally:
print('end ...')
print(division(2, '3'))
- 抛出错误:
Traceback (most recent call last):
File "Test.py", line 15, in <module>
print(division(2, '3'))
File "Test.py", line 11, in division
raise Invalid('非法输入', y)
main.Invalid: ('非法输入', '3')
错误记录:使用logging模块,通过配置,logging还可以把错误记录到日志文件里。
import logging
def division(x, y):
try:
result = x / y
return result
except Exception as e:
logging.exception(e)
finally:
print('end ...')
print(division(2, '3'))