python - 无法捕获 Flask 应用程序中的 _mysql_exceptions.OperationalError

标签 python sqlalchemy flask

我有一个 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/

相关文章:

python - 为什么减小 np.linspace 的范围会提高数值积分的精度?

flask - 如何在模板内的结果中突出显示搜索查询

python - 我正在尝试使用 pandas 和 sqlalchemy 将数据加载到 redshift 中

python - flask 可选的 url 参数不起作用

Python gmplot 'centerLat' 未定义

python - 进行 train_step.run() 时出现 Tensorflow 错误

python - 有向图 - SQLAlchemy ORM

json - 从 Flask 后端获取对 Angular 的 JSON 响应

ssl - 如何为flask api和客户端配置ssl证书

javascript - 如何通过 Jinja2 将 Python 列表传递给 JavaScript