说白了 404 错误就是路由不匹配,
我们看 tornado 源码文件
web.py 中有 Application 类中的__call__方法中有:
if not handler:
handler = ErrorHandler(self, request, status_code=404)
也就是所有错误的路由( 404 )将统一由 ErrorHandler 来处理, 再看看 ErrorHandler 的源码定义:
class ErrorHandler(RequestHandler):
"""Generates an error response with status_code for all requests."""
def initialize(self, status_code):
self.set_status(status_code)
def prepare(self):
raise HTTPError(self._status_code)
可以看到 ErrorHandler 继承自 RequestHandler 而并非你自定义的 BaseHandler 类
所以即使你在 BaseHandler 中定义了 write_error 方法, ErrorHandler 中也不会有 write_error 的处理逻辑
PS :自定义的 write_error 逻辑将在请求路由存在, 但请求方法错误时被调用
比如,就拿你的代码来说: 如果你向 '/' 发出 POST 请求( curl -X POST http://localhost:8000/ ),就会返回 Func write_error !错误