我希望在我的wsgi应用程序中出现未被捕获的异常时生成一个http响应状态为“200 OK”的html页面,而不是Web服务器对此类情况的标准“500内部服务器错误”响应。为了测试这个功能,我做了以下示例代码:
import sys
def application(environ, start_response):
def exception(etype, evalue, trace):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Error']
sys.excepthook = exception
1/0
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['OK']
但是从不调用函数'exception',并且在未捕获异常的情况下服务器仍然会生成标准的“500 Internal Server Error”响应。
是否有可能通过尝试创建一个未被捕获的钩子...除了mod_wsgi下的异常以某种方式?
答案 0 :(得分:0)
我刚刚意识到,绕过可以实现我需要的目标而无需重新定义sys.excepthook:
def actual_application(environ, start_response):
# Real WSGI application goes here
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['OK']
def error(environ, start_response):
# Format a trace and a debug info to send it to a browser here
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Error']
def application(environ, start_response):
# And the mod_wsgi application hook should consist of the only try...except block
try:
return actual_application(environ, start_response)
except:
return error(environ, start_response)