我正在尝试将Sentry集成到我的Flask应用程序中报告错误,但最近我遇到一个问题,当第三方库导致BaseException
被抛入我的一个处理程序时。我看到Flask处理Exception
没有问题,但BaseException
基本上导致应用停止工作。一个简单的例子:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
raise BaseException('Bummer! Exception')
return 'Hello world'
if __name__ == '__main__':
app.run(debug=True, port=5004)
调用我得到的路线:
$ curl localhost:5004
curl: (52) Empty reply from server
随后对该应用程序的调用会使卷曲挂起,等待回复。
我尝试使用errorhandler
装饰器,如下所示:
@app.errorhandler(BaseException)
def handle():
print("Whoops.")
但是Flask给了我一个错误:
assert issubclass(exc_class, Exception)
AssertionError
这是公平的。我知道这个第三方库应该是Exception
的子类,而不是BaseException
,但我仍然希望有一种方法可以在Flask中处理这些错误并结束请求。