gpt4 book ai didi

python - 如何在单个地方处理 flask 中的一般异常?

转载 作者:行者123 更新时间:2023-12-01 02:28:13 26 4
gpt4 key购买 nike

我正在使用flask,这里举例说明我想要做什么。我从 Flask 门户复制了代码。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
return 'Hello, World!'

运行应用程序

(py35) root@localhost:tmp root$ flask run
* Serving Flask app "hello"
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

发送请求

root@localhost:~ root$ curl http://localhost:5000/
Hello, World!

我修改了我的函数并将其更改为引发错误。

@app.route('/')
def hello_world():
print(xyz)
return 'Hello, World!'

当我尝试发送请求时,失败

[2017-11-06 10:22:13,625] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "/py35/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/py35/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/py35/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/nile2691/sbdev/StorageCenterUI/.tox/py35/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/py35/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "py35/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/private/tmp/hello.py", line 6, in hello_world
print(xyz)
NameError: name 'xyz' is not defined

我可以在我的代码中添加try... except,但在实际代码中,它在很多地方,我不想在任何地方处理这个一般异常。

有没有类似的方法

try:
process_flask_request()
except Exception as ex:
# Log detail exception
logger.exception(ex)
return "Custome error message for all general exception"

通过此更改,不会出现如下所示的一般错误

curl http://localhost:5000/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>

我想返回正确的输出,以及自定义错误消息。

最佳答案

您可以包含这样的错误处理程序,例如为了更好地显示示例中的内部服务器错误:

import traceback

(...some code...)

@app.errorhandler(500)
def internal_error(e):
"""
handle internal errors nicely
"""
tb = traceback.format_exc()
return render_template('error.html',
error=e.message,
traceback=tb), 500

在您的模板中,您可以输出简短的错误消息,以及(如果您有用户管理,则可能取决于用户权限)详细的堆栈跟踪。

正如您问题的评论中所提到的,您应该阅读文档以了解完整情况。

关于python - 如何在单个地方处理 flask 中的一般异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47141503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com