python的通用catch

时间:2009-01-14 09:05:20

标签: python exception

我有一些非常奇怪的行为,似乎导致了无声的异常。如何编写一般的try catch,我可以调试所有异常。有点像:

try:
    # something that fails
except e:
    print e

详细了解手头的问题:

我有一个Django应用程序,在我的comp(Ubuntu Linux 8.10)上通过runserver和mod-python工作正常。在部署服务器(Ubunut Linux 8.10)上,它通过runserver工作正常,但在mod-python中通过apache失败。

我已将原因缩减为使用Berkeley DB(bsddb.db)和辅助密钥的应用程序的一部分。辅助键的回调方法使用pickle来格式化键。当我在单个值上调用pickle时失败。但是,它只在我使用cPickle时失败,并且在回调函数之外的相同值上使用pickle也可以。

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

3 个答案:

答案 0 :(得分:130)

在程序终止之前,默认情况下已经打印了例外。如果你想在其他地方发送错误(不打印它),你可以这样做:

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:

答案 1 :(得分:2)

traceback module对于格式化回溯非常有用。然后,您可以将其写入日志文件。

答案 2 :(得分:1)

这有用吗? :

except BaseException, e: