CherryPy:`error_page.default` 与 `error_page.404` 配置设置有什么区别?

CherryPy: what is the difference between `error_page.default` vs. `error_page.404` config settings?

假设我想显示我自己的 404 和 500 页,到目前为止我发现了 2 种可能性:

1:使用 cherrypy.config.update

def error_page_404(status, message, traceback, version):
    return ('Error 404 Page not found')

def error_page_500(status, message, traceback, version):
    return ('Error:')

cherrypy.config.update({'error_page.404': error_page_404, 'error_page.500': error_page_500})
  1. 使用_cp_config:
from cherrypy import _cperror

def handle_error():
    cherrypy.response.status = 500
    cherrypy.log("handle_error() called. Alarm!", "WEBAPP")
    cherrypy.response.body = ['Sorry, an error occured. The admin has been notified']
    error = _cperror.format_exc()

def error_page(status, message, traceback, version):
    cherrypy.log("error_page() called. Probably not very important.", "WEBAPP")
    return "Sorry, an error occured."

class Root: 
     _cp_config = { 
         'error_page.default': error_page, 
         'request.error_response': handle_error 
     } 

但是有什么区别或建议更适合使用吗?

request.error_response 允许您设置处理程序来处理一些意外错误,例如您自己从 HTTP 处理程序引发的异常。 您为此选项设置的可调用对象将完全不接收任何参数,您必须检查 sys.exc_info() 以了解详细信息,以了解发生了什么。 您还 必须 自己设置 cherrypy.response.statuscherrypy.response.body,明确地在您的错误处理程序中。

如果要修改 HTTP 错误代码的错误响应(当引发 cherrypy.HTTPError 的实例时,如 raise cherrypy.NotFound),您可以使用 error_page.default(包罗万象)或 error_page.404 (特定于错误)用于处理这些错误。 error_page 选项支持文件路径和可调用值。如果使用文件路径,HTML 模板文件可以使用以下替换模式:%(status)s%(message)s%(traceback)s%(version)s。 如果您选择使用某个函数,它将接收这些作为参数 (callback(status, message, traceback, version))。然后使用此可调用对象的 return 值 HTTP 响应负载。

如您所见,这些方法具有不同的含义以及不同级别的灵活性和可用性。选择适合你的任何东西。在内部,默认 request.error_response 使用 error_page 设置来确定 return 的内容。因此,如果您重新定义 request.error_response,它将不会使用 error_page.* 设置,除非您明确地让它这样做。

参见 the docstring with some explanation here