刚开始学 tornado ,它的异常处理机制有点弄不明白。
写了一个测试用的小脚本,期望遇到 404 的时候能够触发我自己声明的 write_error 函数,然而 write_error 并没有生效,输出的是 tornado 默认的 404 页面。
代码如下:
#!/bin/env python3.5
#coding:utf-8
import os
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8000, help="端口", type=int)
class BaseHandler(tornado.web.RequestHandler):
def write_error(self, stat, **kw):
self.write('Func write_error !')
class IndexHandler(BaseHandler):
def get(self):
self.write('hello')
handlers = [
(r'/index', IndexHandler),
]
settings = {
'template_path': os.path.join(os.path.dirname(__file__), "templates"),
'static_path': os.path.join(os.path.dirname(__file__), 'static'),
}
if __name__ == '__main__':
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=handlers, **settings)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
print(options.port)
tornado.ioloop.IOLoop.instance().start()
然后去 google 了一下,把 BaseHandler 成了这样,但是 404 的时候还是返回了默认的 404 页面:
class BaseHandler(tornado.web.RequestHandler):
def _handle_request_exception(self, e):
self.write_error(404)
def send_error(self, stat, **kw):
self.write_error(404)
def write_error(self, stat, **kw):
self.write('Func write_error !')
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.