Dựa trên một số googling tôi đã cài đặt trình xử lý lỗi sau. Tuy nhiên, các ngoại lệ trăn xuất hiện để trả lại một http 500 không bị mắc kẹt bởi công cụ này, mặc dù 404 là. Với các câu lệnh in mà tôi đã để lại trong đoạn mã dưới đây, tôi có thể thấy rằng nó không ảnh hưởng đến bất kỳ thói quen nào. Tôi nên làm gì đây?Duyên dáng xử lý ngoại lệ ứng dụng trong ứng dụng 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, cảm ơn bạn đã phản hồi. Bằng cách khai báo phương thức write_error() cho hanlders, tôi có thể bẫy 500s; tuy nhiên phương pháp này không thực sự hoạt động để xử lý các 404 trên trang web! Vì vậy, tôi đã phải kết hợp một lớp xử lý lỗi toàn cục mà tôi đã gán cho tornado.web.ErrorHandler, ngoài lớp cơ sở với phương thức write_error() như bạn đã đề xuất. Bây giờ tôi có thể bắt ngoại lệ ứng dụng của tôi, ngoài các 404 toàn cầu. – Karra