Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flask/Python:用户定义异常的错误处理程序_Python_Flask_Exception Handling - Fatal编程技术网

Flask/Python:用户定义异常的错误处理程序

Flask/Python:用户定义异常的错误处理程序,python,flask,exception-handling,Python,Flask,Exception Handling,我使用Flask/Python制作了一个简单的web应用程序。我有一个用户定义的异常,我正在使用它来尝试捕获代码中的异常。但是,我想为用户定义的异常显示一个自定义错误页面。在Flask中,我读到您必须使用@errorhandler装饰器 我读到的很多例子都是这样的: @app.errorhandler(Exception) #some code 我的问题是,@app.errorhandler后面的括号中具体是什么?是否传入已定义的异常类的名称?我在线阅读的示例中没有一个实际说明括号之间的内容,

我使用Flask/Python制作了一个简单的web应用程序。我有一个用户定义的异常,我正在使用它来尝试捕获代码中的异常。但是,我想为用户定义的异常显示一个自定义错误页面。在Flask中,我读到您必须使用
@errorhandler
装饰器

我读到的很多例子都是这样的:

@app.errorhandler(Exception)
#some code
我的问题是,
@app.errorhandler
后面的括号中具体是什么?是否传入已定义的异常类的名称?我在线阅读的示例中没有一个实际说明括号之间的内容,因此我想知道要在括号中传递什么异常。

的参数是用户定义的异常。在处理程序中,您可以返回任何需要的内容,其中包括一个模板。例如:

from flask import render_template

class MyCustomException(Exception):
    pass

@app.errorhandler(MyCustomException)
def custom_handler(e):
    return render_template('my_custom_error_page.html')
@app.route('/test_exception')
def test_exception():
    raise MyCustomException('just testing :)')
在这种情况下,每当引发
MyCustomException
时,应用程序将返回html页面
myu custom\u error\u page.html

您可以测试这一点,强制异常发生。例如:

from flask import render_template

class MyCustomException(Exception):
    pass

@app.errorhandler(MyCustomException)
def custom_handler(e):
    return render_template('my_custom_error_page.html')
@app.route('/test_exception')
def test_exception():
    raise MyCustomException('just testing :)')

在Flask应用程序中的路由处理程序中,我使用try-except块捕获任何异常。但是,我实际上在Python代码中引发异常,该代码与包含路由处理程序代码的文件是分开的。即使在“try except”块中捕获了异常,您如何显示该异常的自定义错误页?是否再次引发异常?如果捕获异常,它将不会引发,因此自定义页面将不会显示。如果您希望它即使在
try except
块中也能显示,只需在
except
块中添加一个this行:
raise