Na podstawie niektórych googlowań zainstalowałem następujący program obsługi błędów. Jednak wyjątki Pythona, które wydają się zwracać http 500, nie są uwięzione przez te rzeczy, chociaż są 404. Z instrukcjami print, które zostawiłem w poniższym kodzie, widzę, że nie trafił on żadnej z tych procedur. Co powinienem robić?Wyczerpujące obsługa wyjątków aplikacji w aplikacji Tornado
class ErrorHandler(tornado.web.RequestHandler):
"""Generates an error response with status_code for all requests."""
def __init__ (self, application, request, status_code):
print 'In ErrorHandler init'
tornado.web.RequestHandler.__init__(self, application, request)
self.set_status(status_code)
def get_error_html (self, status_code, **kwargs):
print 'In get_error_html. status_code: ', status_code
if status_code in [403, 404, 500, 503]:
filename = '%d.html' % status_code
print 'rendering filename: ', filename
return self.render_string(filename, title=config.get_title())
return "<html><title>%(code)d: %(message)s</title>" \
"<body class='bodyErrorPage'>%(code)d: %(message)s</body>"\
"</html>" % {
"code": status_code,
"message": httplib.responses[status_code],
}
def prepare (self):
print 'In prepare...'
raise tornado.web.HTTPError(self._status_code)
Iboola, dziękuję za odpowiedź. Deklarując metodę write_error() dla hanlderów, jestem w stanie uwięzić 500-y; jednak to podejście nie działa tak naprawdę w przypadku obsługi 404 w całej witrynie! Musiałem więc połączyć globalną procedurę obsługi błędów, którą przypisałem do tornado.web.ErrorHandler, oprócz klasy bazowej z metodą write_error(), zgodnie z sugestią użytkownika. Teraz jestem w stanie złapać wyjątki aplikacji, oprócz globalnych 404. – Karra