如何使未捕获的异常通过logging
模块而不是stderr
模块输出?
我意识到最好的方法是:
try:
raise Exception, 'Throwing a boring exception'
except Exception, e:
logging.exception(e)
但我的情况是,如果在没有捕获异常时自动调用logging.exception(...)
,则会是really nice.
如何使未捕获的异常通过logging
模块而不是stderr
模块输出?
我意识到最好的方法是:
try:
raise Exception, 'Throwing a boring exception'
except Exception, e:
logging.exception(e)
但我的情况是,如果在没有捕获异常时自动调用logging.exception(...)
,则会是really nice.
正如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.