当需要抛出Python异常的时候,我们往往处理不好。这里总结一些方法。
一般的做法
try:
do_something()
except:
do_cleanup()
这样的处理会直接把内部异常吃掉,当有问题/Bug时,会很难处理,所以不推荐。
直接打印错误
try:
do_something()
except Exception as e:
do_cleanup()
print(e)
# or
import traceback
traceback.print_exc()
这种直接打印的,一是不能很好地输出到日志里,二是不能把错误交到上层调用者,不能让其知道这是有问题的。
异常抛向上层
try:
do_something()
except:
do_cleanup()
raise
使用这种,主要是为了做cleanup,直接raise之后,异常会抛向上层。
一种和上面的效果类似的:
try:
do_something()
except:
import sys
exc_info = sys.exc_info()
raise exc_info[0], exc_info[1], exc_info[2]
抛出包装后的异常时将原始的异常也带上
try:
do_something()
except:
import sys
exc_info = sys.exc_info()
raise MyException(), None, exc_info[2]
转载来源
http://xcodest.me/How_to_raise_python_exception.html