【发布时间】:2018-07-26 10:29:52
【问题描述】:
我为这样的烧瓶应用程序编写了一个通用错误处理程序
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 错误(请求实体太大),我不会被重定向到错误处理程序?相反,我可以像这样创建一个额外的错误处理程序
@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 错误?
【问题讨论】:
标签: python flask exception-handling werkzeug