不知怎的,文档似乎错过了这一部分。这是我在从源代码中寻找自定义错误处理的详细解释时发现的。
自定义错误处理
预期的 HTTP 响应
'error_page' 配置命名空间可用于提供自定义 HTML 输出
预期的响应(例如 404 Not Found)。提供一个文件名,其中
将读取输出。内容将用值进行插值
使用普通旧 Python 的 %(status)s、%(message)s、%(traceback)s 和 %(version)s字符串格式化 http://docs.python.org/2/library/stdtypes.html#string-formatting-operations.
_cp_config = {
'error_page.404': os.path.join(localDir, "static/index.html")
}
从版本 3.1 开始,您还可以提供一个函数或其他可调用的函数
error_page 条目。它将传递相同的状态、消息、回溯和
插入到模板中的版本参数
def error_page_402(status, message, traceback, version):
return "Error %s - Well, I'm very sorry but you haven't paid!" % status
cherrypy.config.update({'error_page.402': error_page_402})
同样在 3.1 中,除了编号的错误代码之外,您还可以提供error_page.default
处理没有自己的 error_page 的所有代码
入口。
意外错误
CherryPy 还有一个通用的错误处理机制:每当出现意外情况时
您的代码中发生错误,它将调用Request.error_response
到
设置响应状态、标头和正文。默认情况下,这是相同的
输出为HTTPError(500)
。如果您想提供
一些其他行为,您通常替换“request.error_response”。
以下是一些示例代码,展示了如何显示自定义错误消息以及
发送包含错误的电子邮件
from cherrypy import _cperror
def handle_error():
cherrypy.response.status = 500
cherrypy.response.body = [
"<html><body>Sorry, an error occurred</body></html>"
]
sendMail('[email protected] /cdn-cgi/l/email-protection',
'Error in your web app',
_cperror.format_exc())
@cherrypy.config(**{'request.error_response': handle_error})
class Root:
pass
请注意,您必须显式设置response.body
而不是简单地返回错误消息作为结果。