将Python异常信息转换为字符串以便记录日志

5

我尝试在Python 2.5中记录异常,但无法实现。所有格式化函数执行的操作与我想要的不同。

我想到了这个:

def logexception(type, value, traceback):
  print traceback.format_exception(type, value, traceback)

sys.excepthook = logexception

但是当调用它时,它会因为参数错误而退出,尽管根据文档它应该可以工作。有人知道这个问题是什么或者是否有其他可替换的解决方案吗?

2个回答

5
为什么那个“traceback”参数应该像它篡改名称的traceback模块中的函数一样有一个“format_exception”方法?如果它有一个,为什么该方法还需要将调用它的相同对象作为最后一个参数传入?
我怀疑你只是想给第三个参数取一个不同的名称,以避免隐藏traceback模块,比如:
import sys
import traceback

def logexception(type, value, tb):
  print traceback.format_exception(type, value, tb)

sys.excepthook = logexception

事情应该会变得更好。


有些尴尬。这是你自己代码中无法发现的错误,但别人却能立刻发现。 :) 谢谢。 - pythonuser
2
既然我提交了相同的答案(晚了一分钟),我会删除我的答案。为了完整起见:由于类型作为参数也遮盖了内置函数,我认为它也应该被重命名为exc_type或其他... - ChristopheD
没错。我也把那个重命名了。谢谢。 - pythonuser
@pythonuser,不用谢;如果这个答案解决了你的问题,请记得接受它(这是核心SO礼仪)。@ChristopheD,感谢你删除了重复内容,我同意即使没有直接伤害,遮蔽内置函数也永远不是一个好习惯(只是试图让事情集中在pythonuser的具体问题上!)。 - Alex Martelli


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接