异常处理
在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因
try...except...finally...
的错误处理机制
首先,执行try
子句(在关键字try
和关键字except
之间的语句)
如果没有异常发生,忽略except
子句,try
子句执行后结束。
如果在执行try
子句的过程中发生了异常,那么try
子句余下的部分将被忽略。如果异常的类型和except
之后的名称相符,那么对应的except
子句将被执行。最后执行try语句之后的代码。
如果一个异常没有与任何的except
匹配,那么这个异常将会传递给上层的try
中
不管try
子句里面有没有发生异常,finally
子句都会执行
调用栈
如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出
记录错误
Python内置的logging
模块可以非常容易地记录错误信息
同样是出错,但程序打印完错误信息后会继续执行,并正常退出
抛出错误
因为错误是class,捕获一个错误就是捕获到该class的一个实例。因此,错误并不是凭空产生的,而是有意创建并抛出的
如果要抛出错误,首先根据需要,可以定义一个错误的class,选择好继承关系,然后,用raise
语句抛出一个错误的实例
raise
语句如果不带参数,就会把当前错误原样抛出