【发布时间】:2010-07-01 03:26:14
【问题描述】:
不是将我的整个代码封装在一个 try{} except{} 块中,有没有办法在全局范围内捕获异常?
基本上我正在寻找一种方法来拥有一个全局异常处理程序,它将处理我为谷歌应用引擎编写的 python 应用程序中所有未处理的异常
【问题讨论】:
标签: python google-app-engine exception-handling global
不是将我的整个代码封装在一个 try{} except{} 块中,有没有办法在全局范围内捕获异常?
基本上我正在寻找一种方法来拥有一个全局异常处理程序,它将处理我为谷歌应用引擎编写的 python 应用程序中所有未处理的异常
【问题讨论】:
标签: python google-app-engine exception-handling global
如果您使用的是 webapp 框架,您应该已经定义了一个用作基类的 RequestHandler 的子类,并且您的应用程序的所有处理程序都对其进行了扩展。您可以简单地覆盖 handle_exception,它充当任何未捕获异常的全局异常处理程序。
default implementation 调用 self.error(500),记录异常,如果开启调试,则输出堆栈跟踪。
如果你正在使用另一个框架,你可以编写一个 WSGI 中间件来调用包装好的 WSGI 应用程序,并捕获任何抛出的异常,并按照你的意愿处理它们。
【讨论】:
嗯,在最基本的层面上,您可以将 app.yaml 引用的所有处理程序脚本包装在一个巨大的 try-except 块中。
如果您使用的是 webapp 框架,请考虑为每个请求处理程序覆盖 handle_exception()。如果您希望所有请求处理程序都具有您指定的一些基本异常处理,您可以使用实现此方法的请求处理程序,然后从中派生所有处理程序。
【讨论】:
您的应用程序可能有一个 main() 函数,将 try/except 放在该函数中,它会捕获您应用程序中的所有内容。
【讨论】: