【发布时间】:2019-05-22 13:40:26
【问题描述】:
我正在编写一个 Flask 应用程序,我在其中调用了一个可能返回 403 的方法。我认为以下代码可以适当地处理该错误:
try:
connection = myLib.Login(username, password)
except urllib.error.HTTPError as err:
abort(err.code)
但这似乎不起作用。如果 myLib.Login 返回 403,我会得到以下信息:
[2019-05-22 15:22:15,798] ERROR in app: Exception on /api/users [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "./app/routes.py", line 16, in authenticate
connection = myLib.Login(username, password)
File "/usr/local/lib/python3.7/site-packages/mylib.py", line 90, in __open
resp = opener.open(req)
File "/usr/local/lib/python3.7/urllib/request.py", line 531, in open
response = meth(req, response)
File "/usr/local/lib/python3.7/urllib/request.py", line 641, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/local/lib/python3.7/urllib/request.py", line 569, in error
return self._call_chain(*args)
File "/usr/local/lib/python3.7/urllib/request.py", line 503, in _call_chain
result = func(*args)
File "/usr/local/lib/python3.7/urllib/request.py", line 649, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
如何捕获此错误并返回 403?
在常规 Python 脚本中,异常触发很好,所以我怀疑这可能与 flask 和/或 uwsgi 有关。
【问题讨论】:
-
不抛出异常。但是,如果我编写一个简单的 Python 脚本(显然没有烧瓶或 uwsgi)异常触发就好了。有什么想法吗?