我有一个 Flask 应用程序,其路线如下所示:
from _mysql_exceptions import OperationalError
@mod.route('/', methods=['POST'])
def do_something_route():
try:
do_something(request.form)
except OperationalError:
message = {"error": "something went wrong"}
return jsonify(message, mimetype='application/json'), 400
do_something()
函数:
def do_something(self, form_data):
model = MyModel()
for key in form_data:
if hasattr(model, key):
setattr(model, key, form_data.get(key))
db.session.add(model)
db.session.commit()
return model
当我向违反数据库约束的 do_something_route
发送垃圾数据时,会引发 OperationalError
异常,并返回状态代码为 500 的响应以及堆栈跟踪,不是我的状态为 400 的 json 化消息。
当我尝试这是一个普通的旧 python shell 时,它似乎按预期工作:
>>> from _mysql_exceptions import OperationalError
>>> raise OperationalError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
_mysql_exceptions.OperationalError
>>> try:
... raise OperationalError
... except OperationalError:
... print 'test'
...
test
为什么除了OperationalError:
没有捕获OperationalError
异常? Flask 是否做了一些提前返回响应的黑魔法?
最佳答案
from sqlalchemy.exc import OperationalError
try:
# do something
except OperationalError:
# do something
关于python - 无法捕获 Flask 应用程序中的 _mysql_exceptions.OperationalError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17481108/