Skip to content

@app.errorhandler() cannot be used in blueprint when debug=False #5430

@mengshun2022

Description

@mengshun2022

I want to customize an error type in Flask, and then use @app.errorhandler() in the main program to capture it. Then, I define a function raise_error to actively throw this exception. When debug=True is enabled at runtime, both the main and blueprint routes can be used normally in the interface function. However, when debug=False, only the main route can be used, and the blueprint route cannot capture it and reports a program error,I hope someone can help me take a look
There are two files in total(mains.py,aaa.py)

#python mains.py
from flask import jsonify, Flask
from typing import Union
app = Flask(__name__)

class CustomError(Exception):
    def __init__(self, message, status_code=500):
        try:
            self.message = message.__dict__
        except Exception as e:
            self.message = message
        self.status_code = status_code

def raise_error(msg: Union[dict, str], status: Union[int, str] = 500):
    raise CustomError(msg, status_code=status)

@app.route("/")
def home():
    raise_error("this is error")
    return {}

from aaa import router
app.register_blueprint(router)

@app.errorhandler(CustomError)
def handle_custom_exception(error: CustomError):
    response = jsonify({"code": error.status_code, "data": error.message})
    response.status = 20
    return response

if __name__ == "__main__":
    # app.run(host="0.0.0.0", port=7788, debug=True) #can in blueprint
    app.run(host="0.0.0.0", port=7788, debug=False)  # cannot in blueprint

#python aaa.py
from flask import Blueprint, jsonify

router = Blueprint("aaa", __name__, url_prefix="/aaa")

@router.get("/")
def aaa():
    from mains import raise_error
    print("is runing")
    raise_error("this is eror in blueprint")
    return jsonify({"data": "in blueprint"})
Flask==3.0.2
typing_extensions==4.10.0
python == 3.12.2
(my_flask) PS C:\Users\Administrator\Desktop\flask_project> & C:/ProgramData/miniconda3/envs/my_flask/python.exe c:/Users/Administrator/Desktop/flask_project/mains.py
 * Serving Flask app 'mains'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:7788
 * Running on http://192.168.3.69:7788
Press CTRL+C to quit
127.0.0.1 - - [05/Mar/2024 11:10:07] "GET / HTTP/1.1" 20 -
127.0.0.1 - - [05/Mar/2024 11:10:07] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [05/Mar/2024 11:10:12] "GET /aaa HTTP/1.1" 308 -
is runing
[2024-03-05 11:10:12,268] ERROR in app: Exception on /aaa/ [GET]
Traceback (most recent call last):
  File "C:\ProgramData\miniconda3\envs\my_flask\Lib\site-packages\flask\app.py", line 1463, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\miniconda3\envs\my_flask\Lib\site-packages\flask\app.py", line 872, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\miniconda3\envs\my_flask\Lib\site-packages\flask\app.py", line 870, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\miniconda3\envs\my_flask\Lib\site-packages\flask\app.py", line 855, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\Administrator\Desktop\flask_project\aaa.py", line 11, in aaa
    raise_error("this is eror in blueprint")
  File "c:\Users\Administrator\Desktop\flask_project\mains.py", line 17, in raise_error
    raise CustomError(msg, status_code=status)
mains.CustomError: this is eror in blueprint
127.0.0.1 - - [05/Mar/2024 11:10:12] "GET /aaa/ HTTP/1.1" 500 -
127.0.0.1 - - [05/Mar/2024 11:10:12] "GET /favicon.ico HTTP/1.1" 404 -

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions