【问题标题】:Tornado Error Handling龙卷风错误处理
【发布时间】:2015-06-19 13:23:07
【问题描述】:

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

我收到一条丑陋的 python 回溯消息,因为引发了 tornado.web.HTTPError 异常。我知道我可以使用正则表达式来捕获除正确 URL 之外的所有情况,但是我认为必须有一种方法可以在 Tornado 中处理此错误。

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

还有人可以告诉我,如果我在 tornado.web.RequestHandler 方法中并执行 raise KeyError 或其他异常而不发现它为什么不调用 write_error()?似乎忽略了异常。

【问题讨论】:

  • 我认为这可能与 default_handler_class 有关,我正在对此进行调查并将报告

标签: tornado


【解决方案1】:

要提供自定义 404 页面,请创建一个调用 self.set_status(404) 的处理程序(除了生成您想要的任何输出),并在 Application 构造函数关键字参数中将其设置为 default_handler_class

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)

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

【讨论】:

  • 嗨,本,感谢您的回复。我的解决方案是按如下方式覆盖 write_error():class BaseHandler(tornado.web.RequestHandler): def write_error(self, status_code, **kwargs): self.render("error.html",status_code=status_code) 我确实阅读了您在错误处理下的文档中描述的内容。那么 default_handler_class 是否仅用于 404 错误?因为从您的代码来看,它似乎假设它始终是 404 ......(我认为)。我想重用我为所有错误编写的类,而不仅仅是 404s?或者你会建议我创建单独的类。
  • default_handler_class 仅适用于 404;对于其他错误,您需要在基类中定义write_error(然后您的default_handler_class 可以简单地将其子类化并在prepare() 中定义raise tornado.web.HTTPError(404)
猜你喜欢
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多