You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 -
The text was updated successfully, but these errors were encountered:
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. Whendebug=True
is enabled at runtime, both the main and blueprint routes can be used normally in the interface function. However, whendebug=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 lookThere are two files in total(
mains.py
,aaa.py
)The text was updated successfully, but these errors were encountered: