首页 文章

我用龙卷风写了一个项目,但是这个例外总是在我的日志文件中

提问于
浏览
-4

这是错误日志:

[I 160308 11:09:59 web:1908] 200 GET / admin / realtime(117.93.180.216)107.13ms [E 160308 11:09:59 http1connection:54]未捕获异常Traceback(最近一次调用最后一次):文件“ /usr/local/lib/python3.4/dist-packages/tornado/http1connection.py“,第238行,在_read_message delegate.finish()文件中”/usr/local/lib/python3.4/dist-packages/tornado /httpserver.py“,第290行,在完成self.delegate.finish()文件”/usr/local/lib/python3.4/dist-packages/tornado/web.py“,第1984行,在完成self.execute ()文件“/usr/local/lib/python3.4/dist-packages/blueware-1.0.10/blueware/hooks/framework_tornado/web.py”,第480行,在_bw_wrapper__RequestDispatcher_execute future = wrapped(* args,) (文件)“/ usr / local / lib / python3.4 / dist-packages / blueware-1.0.10 / blueware / hooks / framework_tornado / web.py“,第448行,_bw_wrapper_RequestHandler___init___返回包装(* args, kwargs)文件”/ usr / local /lib/python3.4/dist-packages/tornado/web.py“,第185行,在init self.initialize(** kwargs)文件中”/usr/local/lib/python3.4/dist-packages/tornado/ web.py“,第2714行,在包装器self.redirect(url)文件”/usr/local/lib/python3.4/dist-packages/tornado/web.py“,第671行,重定向self.finish()文件“/usr/local/lib/python3.4/dist-packages/blueware-1.0.10/blueware/hooks/framework_tornado/web.py”,第309行,在_bw_wrapper_RequestHandler_finish_中返回包装(* args,** kwargs)文件“/usr/local/lib/python3.4/dist-packages/tornado/web.py”,第934行,在完成self.flush(include_footers = True)文件“/usr/local/lib/python3.4/dist -packages / tornado / web.py“,第870行,在flush中进行变换self._transforms:TypeError:'NoneType'对象不可迭代[I 160308 11:10:00 web:1908] 200 GET / admin / order? order_type = 1&order_status = 1&page = 0&action = allreal(49.89.27.173)134.53ms

谁能告诉我如何解决这个问题?非常感谢你

1 回答

  • 1

    我假设OneAPM(蓝色代理)与你的python和Tornado版本兼容,但它可能很棘手 .

    解决方案

    self.redirect(url) 从处理程序 initialize 方法移动到 get 方法,就像这样

    class MyHandler(tornado.web.RequestHandler):
        def get(self):
            self.redirect('/some_url')
    

    或使用RedirectHandler .

    每个可以完成请求的操作都需要在http-verb方法(get,post,put等)的上下文中调用 . common mistake正在 __init__initialize 进行认证/授权 .

    更多细节

    在Tornado的源代码中有一个关于 _transforms 的注释,它在构造函数中用 None 初始化并设置在 _execute (过度简化 - 在headers_received之后) .

    变换修改HTTP请求的结果(例如,GZip编码) . 应用程序不会创建自己的OutputTransforms或直接与它们交互;框架选择要应用的转换(如果有) .

    重现

    触发此错误的示例 . 我只是把它作为交叉检查,包括蓝色软件不是原因:

    import tornado.ioloop
    import tornado.web
    
    class SomeHandler(tornado.web.RequestHandler):
    
        def initialize(self, *args, **kwargs):
            url = '/some'
            self.redirect(url) 
            # ^ this is wrong
    
        def get(self):
            # redirect should be here
            self.write("Hello")
    
    
    def make_app():
        return tornado.web.Application([
            (r"/", SomeHandler),
        ])
    
    if __name__ == "__main__":
        app = make_app()
        app.listen(8888)
        tornado.ioloop.IOLoop.current().start()
    

    和堆栈跟踪:

    ERROR:tornado.application:Uncaught exception
    Traceback (most recent call last):
      File "/tmp/py3/lib/python3.4/site-packages/tornado/http1connection.py", line 238, in _read_message
        delegate.finish()
      File "/tmp/py3/lib/python3.4/site-packages/tornado/httpserver.py", line 289, in finish
        self.delegate.finish()
      File "/tmp/py3/lib/python3.4/site-packages/tornado/web.py", line 2022, in finish
        self.execute()
      File "/tmp/py3/lib/python3.4/site-packages/tornado/web.py", line 2042, in execute
        **self.handler_kwargs)
      File "/tmp/py3/lib/python3.4/site-packages/tornado/web.py", line 183, in __init__
        self.initialize(**kwargs)
      File "test.py", line 8, in initialize
        self.redirect(url)
      File "/tmp/py3/lib/python3.4/site-packages/tornado/web.py", line 666, in redirect
        self.finish()
      File "/tmp/py3/lib/python3.4/site-packages/tornado/web.py", line 932, in finish
        self.flush(include_footers=True)
      File "/tmp/py3/lib/python3.4/site-packages/tornado/web.py", line 868, in flush
        for transform in self._transforms:
    TypeError: 'NoneType' object is not iterable
    

相关问题