您如何通过 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/

10-16 05:49