python的通用捕获


86

我有一些极其奇怪的行为,似乎会导致无声异常。我该如何编写一个通用的try catch来调试所有异常。类似于以下内容:

try:
    # something that fails
except e:
    print e

详细了解手头的问题:

我有一个Django应用程序,该计算机在我的计算机(Ubuntu Linux 8.10)上可以通过runserver和mod-python正常运行。在部署服务器(Ubuntu Linux 8.10)上,它可以通过运行服务器正常运行,但无法通过mod-python中的apache失败。

我将原因减少到使用Berkeley DB(bsddb.db)和辅助密钥的应用程序中。辅助键的回调方法使用pickle格式化键。当我在单个值上调用pickle时,它将失败。但是,只有当我使用cPickle时,它才会失败,并且对回调函数外部的相同值使用pickle也会起作用。

我只想知道为什么cPickle失败。

Answers:


164

默认情况下,在程序终止之前已经打印了异常。如果要将错误发送到其他地方(而不是打印错误),可以执行以下操作:

try:
    something()
except Exception as e:
    send_somewhere(traceback.format_exception(*sys.exc_info()))
    raise # reraises the exception

请注意,使用as关键字的这种格式适用于python> 2.6。旧方法是:

except Exception, e:

5
不知道“ e异常”的更改。“例外,e”总是困扰我,很高兴看到它被清理了。
monkut

3
'as'关键字适用于python> = 2.6
pixelbeat

这样简单的解决方案。但是,我每隔一个月用Google搜索一次,然后单击顶部链接,然后在此处结束。
niCk CAMEL 2018年

3

回溯模块用于格式化回溯相当有用。然后,您可以将其写入日志文件。


1

这样行吗?:

except BaseException, e:

10
您不应该抓住BaseException-它包括SystemExitKeyboardInterrupt,您通常不想抓住的东西。
nosklo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.