如何使未捕获的异常通过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.

Python相关问答推荐

使用破折号在多线图表中无序y轴

我可以随时间更新变量的类型注释吗?

为什么torch.utils.collect_dev声称我已经安装了我使用conda安装的模块

无法在Python中使用Selenium标记正确的元素以抓取网站

ValueRight:参数目标和输出必须具有相同的形状.接收:目标.形状=(无,512),输出.形状=(无,3)

调试回归无法解决我的问题

sys.modulesgo 哪儿了?

替换字符串中的点/逗号,以便可以将其转换为浮动

在Pandas框架中截短至固定数量的列

如果索引不存在,pandas系列将通过索引获取值,并填充值

使用FASTCGI在IIS上运行Django频道

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

对某些列的总数进行民意调查,但不单独列出每列

如何标记Spacy中不包含特定符号的单词?

查找两极rame中组之间的所有差异

可变参数数量的重载类型(args或kwargs)

海运图:调整行和列标签

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

用渐近模计算含符号的矩阵乘法

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍