gpt4 book ai didi

python - Flask 和 sys.excepthook

转载 作者:行者123 更新时间:2023-11-28 22:51:20 24 4
gpt4 key购买 nike

我想将全局异常处理对象添加到我的 Flask web 项目中。在创建应用程序类的主模块中,我添加了代码来覆盖 sys.excepthook。这是简单的测试代码:

import sys

def my_exception_hook(exception_type, value, traceback):
print "My exception handler"
print " Exception type:", exception_type
print " Exception instance:", value
print " Traceback:", traceback

sys.__excepthook__(exception_type, value, traceback)

sys.excepthook = my_exception_hook

from flask import Flask
import requests

app = Flask(__name__)

@app.route('/')
def index():
#Exception raised here "requests.exceptions.MissingSchema" not captured by my handler
r = requests.get('ololo', auth=('user', 'pass'))
return "Hello, world!"

#raise Exception("AAA") #Exception raised here is successfully goes to my_exception_hook

app.run(debug=True, port=5001)

我不想也不可能用 try/catch 包围每个调用或 requests 模块。另外我想处理其他的问题,比如mongoDB的连接问题,这可能是自发的(不是我创建连接的时候),请不要提出。

最佳答案

Flask 已经为您处理了 View 中的异常。使用 sys.excepthook 不是处理此问题的正确方法,永远不会调用 Hook 。

改为使用 Flask 指定自定义异常处理程序,请参阅 Redirects and Errors section快速入门手册:

from flask import render_template

@app.errorhandler(500)
def page_not_found(error):
return 'some error message'

Flask 还使用 logging module记录异常;配置日志记录模块以将严重性为 logging.ERROR 的任何内容写入控制台或日志文件。

由于您使用了 app.run(debug=True, port=5001),您会看到异常打印到控制台。

请注意,只有当调试设置为True时才会调用 500 错误页面;否则 Werkzeug debug view而是被调用。

关于python - Flask 和 sys.excepthook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21627429/

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