我正在使用 Google App Engine 开发 Flask 应用程序,并使用本地开发服务器(即dev_appserver.py
)在我的本地机器上对其进行测试。
当我的应用程序在 app.py 脚本的顶层遇到运行时异常时,我在运行dev_appserver.py
. 但是,当在 Flask 路由中遇到异常时,似乎开发服务器正在捕获并处理异常。我在终端输出中只能看到该路由返回 500 响应状态:
INFO 2017-06-20 13:18:31,998 devappserver2.py:116] Skipping SDK update check.
INFO 2017-06-20 13:18:32,025 api_server.py:297] Starting API server at: http://localhost:43843
INFO 2017-06-20 13:18:32,037 dispatcher.py:209] Starting module "default" running at: http://localhost:8080
INFO 2017-06-20 13:18:32,037 admin_server.py:116] Starting admin server at: http://localhost:8000
INFO 2017-06-20 13:18:36,048 module.py:809] default: "GET /cron/batch/basket HTTP/1.1" 500 291
我可以找到回溯的一种方法是传递dev_appserver.py
标志--logs_path=sqlite.db
,然后AppLogs
在包含回溯的 sqlite 文件中查看表的内容。但这几乎不是一个有用的工作流程。
任何人都知道如何获得在处理 Flask 路由时遇到的异常的回溯?
我对这个问题的解决方案是创建一个装饰器,它捕获任何异常,将其回溯打印到标准输出,然后重新引发异常,然后将其添加到我想要调试的任何路由中:
import traceback
import sys
def print_traceback(func):
"""Decorator that prints exception tracebacks to stdout"""
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception, e:
print "Exception:"
print "============================="
traceback.print_exc(file=sys.stdout)
print "============================="
raise e
return wrapper
@app.route('/some/route')
@print_traceback
def some_route(task):
pass
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句