由于Flask路线中的错误,在本地开发服务器中查看Google App Engine Python回溯

时间:2017-06-20 07:17:33

标签: python google-app-engine flask

我正在使用Google App Engine开发Flask应用,并使用本地开发服务器(即dev_appserver.py)在本地计算机上对其进行测试。

当我的应用程序在app.py脚本的顶层遇到运行时异常时,我在终端中看到了运行dev_appserver.py的回溯。但是,当在Flask路由中遇到异常时,似乎dev服务器正在捕获并处理异常。我在终端输出中看到的只是路由返回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,然后在sqlite文件中查看包含回溯的AppLogs表的内容来找到回溯的一种hacky方式。但这不是一个有用的工作流程。

任何人都知道如何处理在处理Flask路线时遇到的异常的追溯?

2 个答案:

答案 0 :(得分:1)

这样的事情可能有所帮助:

app = Flask(__name__)

production_environment = os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')

if not production_environment:
    app.debug = True

答案 1 :(得分:0)

我解决这个问题的方法是创建一个装饰器,它捕获任何异常,将其回溯打印到stdout,然后重新引发异常,然后我将其添加到我想要调试的路径中:

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