当我想在try块内使用Flask abort时,最终会进入我的异常块。
@app.route('/newsletters/<int:newsletter_id>', methods=['GET'])
def route_get_newsletter(newsletter_id):
if request.method == 'GET':
try:
newsletter = get_newsletter(newsletter_id)
if not newsletter:
abort(404)
except Exception, ex:
logging.exception("Something awful happened!")
abort(500)
else:
return jsonify(newsletter=newsletter)
输出结果为:
ERROR:root:Something awful happened!
Traceback (most recent call last):
File "natuurpuntapi.py", line 210, in route_get_newsletter
abort(404)
File "/usr/lib/python2.7/dist-packages/werkzeug/exceptions.py", line 525, in __call__
raise self.mapping[code](*args, **kwargs)
NotFound: 404: Not Found
当调用werkzeug NotFound时,我会得到500响应。
当我将abort(404)放在try块外面时,它起作用并返回404响应。
- 编辑
我发现flask abort()使用werkzeug abort(),这是一个名为Aborter()的类。当调用此函数时,它会引发"raise self.mapping[code](*args, **kwargs)"
这是否意味着我不能在自己的try块中调用abort,因为它会引发异常并进入我的异常处理程序?