我为这样的烧瓶应用程序写了一个常规错误处理程序
def error_handler(error):
if isinstance(error, HTTPException):
description = error.get_description(request.environ)
code = error.code
name = error.name
else:
description = ("We encountered an error "
"while trying to fulfill your request")
code = 500
name = 'Internal Server Error'
templates_to_try = ['errors/error{}.html'.format(code), 'errors/generic_error.html']
return render_template(templates_to_try,
code=code,
name=Markup(name),
description=Markup(description),
error=error)
def init_app(app):
''' Function to register error_handler in app '''
for exception in default_exceptions:
app.register_error_handler(exception, error_handler)
app.register_error_handler(Exception, error_handler)
我在应用中注册为
error_handler.init_app(app)
但是如果出现413错误(Request Entity Too Large),我不会被重定向到错误处理程序?相反,我可以像这样创建一个额外的错误处理程序
@app.errorhandler(413)
def request_entity_too_large(error):
return 'File Too Large', 413
可以很好地捕获错误。 我发现当我在我的应用程序中人为地引发RequestEntityTooLarge错误时,错误处理程序工作正常。所以它必须与在werkzeuge包中引发错误的事实有关
RequestBase._load_form_data(self)
File "/usr/local/lib/python2.7/site-packages/werkzeug/wrappers.py", line 385, in _load_form_data
mimetype, content_length, options)
File "/usr/local/lib/python2.7/site-packages/werkzeug/formparser.py", line 197, in parse
raise exceptions.RequestEntityTooLarge()
RequestEntityTooLarge: 413 Request Entity Too Large: The data value transmitted exceeds the capacity limit.
有人知道为什么我的第一个解决方案无法捕获413错误吗?但我的第二个解决方案呢?我如何修改error_handler以捕获413错误?
答案 0 :(得分:0)
好的,我找到了解决方案。将error_handler更改为
return render_template(templates_to_try,
code=code,
name=Markup(name),
description=Markup(description),
error=error), code
确实解决了这个问题......虽然不确定
答案 1 :(得分:0)
问题出在flask开发服务器上。它不是真正的成熟服务器,在这方面还不够。您不必担心,因为在生产WSGI服务器等中,它将与正常的错误处理程序一起正常工作。 引用烧瓶文档:
使用本地开发服务器时,您可能会连接 重置错误而不是413响应。您将获得正确的状态 在生产WSGI服务器上运行应用程序时响应。