首页 > 解决方案 > sqlalchemy 错误的烧瓶中未显示代码 500 的自定义错误页面

问题描述

我想为内部错误创建一个自定义错误页面。知道我正在通过重新启动我的数据库服务并尝试在它再次连接之前加载一个页面来测试它。查询返回 OperationalError

我已经禁用了调试模式,所以我没有得到堆栈跟踪,但是我得到了白色背景上的默认文本,而不是自定义的 500 页面。

我不确定这是否是将 sqlalchemy 错误链接到自定义 500 页面的正确方法。如果我没有为 sqlalchemy 定义事件侦听器,则不会调用烧瓶错误处理程序。

@db.event.listens_for(db.engine, "handle_error")
def handle_exception(context):
    internal_error(context.original_exception)

@app.errorhandler(500)
def internal_error(error):
    db.session.rollback()
    return render_template('500.html'), 500

删除 sqlalchemy 事件或重新引发错误也不起作用。

127.0.0.1 - - [11/Jul/2019 17:29:04] "GET /products HTTP/1.1" 500 -
Error on request:
...stack strace...
sqlalchemy.exc.OperationalError: (psycopg2.errors.AdminShutdown) terminating connection due to administrator command
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.

更新:现在我考虑了一下。我认为这与 sqlalchemy 没有任何关系。我尝试除以零,看看我是否会得到我的自定义页面,但同样的事情发生了。

标签: pythonflaskerror-handlingsqlalchemy

解决方案


推荐阅读