9错误处理

1.高级语言通常都内置了一套try...except...finally...的错误处理机制,Python也不例外。


2.如果有finally语句,一定会执行它,但finally语句可以没有;还可以在except语句块后加一个else语句块,当没有错误时,自动执行else语句块。


3.python的错误其实也是class。所有的错误类型都继承自BaseException,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。例如:


Python所有的错误都是从BaseException类派生的,常见的错误类型和继承关系看这里:

https://docs.python.org/3/library/exceptions.html#exception-hierarchy

4.使用try...except捕获错误还有一个巨大的好处,就是可以跨越多层调用,比如函数main()调用foo()foo()调用bar(),结果bar()出错了,这时,只要main()捕获到了,就可以处理。也就是说,不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了。这样一来,就大大减少了写try...except...finally的麻烦。


5.调用堆栈,用logging模块记录错误信息。


6.抛出错误 raise

raise语句如果不带参数,就会把当前错误原样抛出。此外,在exceptraise一个Error,还可以把一种类型的错误转化成另一种类型:



只要是合理的转换逻辑就可以,但是,决不应该把一个IOError转换成毫不相干的ValueError

7小结:

Python内置的try...except...finally用来处理错误十分方便。出错时,会分析错误信息并定位错误发生的代码位置才是最关键的。

程序也可以主动抛出错误,让调用者来处理相应的错误。但是,应该在文档中写清楚可能会抛出哪些错误,以及错误产生的原因。


猜你喜欢

转载自blog.csdn.net/loongqian/article/details/53587128