龙卷风错误处理

Mar*_*n29 5 tornado

我希望能够处理一个更好的错误,如果我键入错误的URL,则显示错误 E.g. localhost:8000/AFDADSFDKFADS

我收到一条丑陋的python traceback消息,因为抛出了tornado.web.HTTPError异常.我知道我可以使用正则表达式来捕获除了正确的URL之外的所有场景但是我认为必须有一种方法来处理Tornado中的这个错误.

我知道我可以使用write_error()while扩展,tornado.web.RequestHandler但因为这个错误发生在tornado.web.Application类中我不知道如何处理它.我认为这可能与班级有关,tornado.web.ErrorHandler(application, request, **kwargs)但我不确定.

也有人可以告诉我,如果我在一个tornado.web.RequestHandler方法中并执行一个raise KeyError或其他异常而没有捕获它为什么write_error()没有被调用?似乎忽略了例外.

Ben*_*ell 13

要提供自定义404页使调用句柄self.set_status(404)(除生产你想要的任何输出),并将其设置为default_handler_classApplication构造函数中的关键字参数.

class My404Handler(RequestHandler):
    # Override prepare() instead of get() to cover all possible HTTP methods.
    def prepare(self):
        self.set_status(404)
        self.render("404.html")

app = Application(..., default_handler_class=My404Handler)
Run Code Online (Sandbox Code Playgroud)

您可能不想使用ErrorHandler:它是一种返回指定状态代码的简单方法,但它不能让您控制输出.

  • 嗨,本,谢谢您的回复。我的解决方案是按如下方式重写write_error():类BaseHandler(tornado.web.RequestHandler):def write_error(self,status_code,** kwargs):self.render(“ error.html”,status_code = status_code)`我确实读过您在错误处理下的文档中描述的内容。那么default_handler_class仅用于404错误吗?因为从您的代码看来,它似乎始终是404 ...(我认为)。我想重用我为所有错误而不仅仅是404错误编写的类?或者您会建议我创建单独的类。 (2认同)
  • default_handler_class仅适用于404s;对于其他错误,您需要在基类中定义“ write_error”(然后您的“ default_handler_class”可以简单地子类化,并在“ prepare()”中提高“ tornado.web.HTTPError(404)”)。 (2认同)