Basado en Google, instalé el siguiente controlador de errores. Sin embargo, las excepciones de Python que parecen devolver un http 500 no quedan atrapadas por este material, aunque sí lo son los 404. Con las declaraciones de impresión que he dejado en el código a continuación, puedo ver que no coincide con ninguna de estas rutinas. ¿Qué debería estar haciendo realmente?Manejo elegante de excepciones de aplicaciones en una aplicación 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, gracias por la respuesta. Al declarar un método write_error() para los ladrones, puedo atrapar los 500; Sin embargo, este enfoque no funciona para manejar los 404 en todo el sitio. Así que tuve que combinar una clase de manejador de error global que asigné a tornado.web.ErrorHandler, además de una clase base con un método write_error() como usted sugirió. Ahora puedo detectar las excepciones de mi aplicación, además de los 404 globales. – Karra