您如何通过 logging
模块而不是 stderr
导致未捕获的异常输出?
我意识到最好的方法是:
try:
raise Exception, 'Throwing a boring exception'
except Exception, e:
logging.exception(e)
但我的情况是,如果
logging.exception(...)
在没有捕获异常时自动调用,那就太好了。 最佳答案
正如 Ned 指出的那样,每次引发和未捕获异常时都会调用 sys.excepthook
。这样做的实际含义是,在您的代码中,您可以覆盖 sys.excepthook
的默认行为来做您想做的任何事情(包括使用 logging.exception
)。
以稻草人为例:
import sys
def foo(exctype, value, tb):
print('My Error Information')
print('Type:', exctype)
print('Value:', value)
print('Traceback:', tb)
覆盖 sys.excepthook
:>>> sys.excepthook = foo
提交明显的语法错误(去掉冒号)并返回自定义错误信息:>>> def bar(a, b)
My Error Information
Type: <type 'exceptions.SyntaxError'>
Value: invalid syntax (<stdin>, line 1)
Traceback: None
有关 sys.excepthook
的更多信息,请阅读 the docs 。关于python - 在 Python 中记录未捕获的异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6234405/