Error handling in production helps your app stay stable and show friendly messages when something goes wrong.
Error handling in production in Flask
from flask import Flask, render_template app = Flask(__name__) @app.errorhandler(404) def not_found_error(error): return render_template('404.html'), 404 @app.errorhandler(500) def internal_error(error): return render_template('500.html'), 500
Use @app.errorhandler(code) to catch specific HTTP errors.
Return a response and the error code to show a custom error page.
from flask import Flask app = Flask(__name__) @app.errorhandler(404) def page_not_found(e): return 'Page not found!', 404
from flask import Flask, jsonify app = Flask(__name__) @app.errorhandler(500) def server_error(e): return jsonify(error='Server error, try later'), 500
from flask import Flask app = Flask(__name__) @app.errorhandler(Exception) def handle_all_errors(e): return 'Something went wrong!', 500
This Flask app shows custom messages for 404 and 500 errors. The /cause-error route triggers a server error to test the 500 handler.
from flask import Flask, render_template_string app = Flask(__name__) # Custom 404 error page @app.errorhandler(404) def not_found(e): return render_template_string('<h1>404 Not Found</h1><p>Sorry, this page does not exist.</p>'), 404 # Custom 500 error page @app.errorhandler(500) def internal_error(e): return render_template_string('<h1>500 Internal Server Error</h1><p>Oops! Something went wrong.</p>'), 500 @app.route('/') def home(): return 'Welcome to the homepage!' @app.route('/cause-error') def cause_error(): 1 / 0 # This will cause a ZeroDivisionError if __name__ == '__main__': app.run(debug=False)
Set debug=False in production to avoid showing detailed error info to users.
Use logging inside error handlers to record errors for fixing later.
Custom error pages improve user experience and keep your app professional.
Error handling keeps your app stable and user-friendly.
Use @app.errorhandler to catch and respond to errors.
Show simple, clear messages instead of raw error details in production.
Practice
@app.errorhandler in a Flask application?Solution
Step 1: Understand the role of
This decorator is used to catch specific HTTP or application errors in Flask.@app.errorhandlerStep 2: Recognize its use for custom responses
It allows developers to return user-friendly error pages or messages instead of default error traces.Final Answer:
To catch specific errors and provide custom responses -> Option AQuick Check:
Error handling = custom responses [OK]
- Thinking it restarts the server automatically
- Confusing errorhandler with logging functions
- Assuming it speeds up app startup
Solution
Step 1: Identify the correct decorator name
The correct Flask decorator for error handling is@app.errorhandler.Step 2: Confirm function signature and return
The function should accept an error parameter and return a response with the error code.Final Answer:
@app.errorhandler(404)\ndef not_found(error):\n return 'Page not found', 404 -> Option BQuick Check:
Correct decorator and function signature = @app.errorhandler(404) def not_found(error): return 'Page not found', 404 [OK]
- Using wrong decorator names like @app.handle_error
- Omitting the error parameter in the function
- Returning without the status code
@app.errorhandler(500)
def internal_error(error):
return 'Something went wrong, please try later.', 500Solution
Step 1: Understand the errorhandler function
The function returns a custom message and status code 500 when a 500 error occurs.Step 2: Identify the user-visible output
The user will see the returned string message with HTTP status 500, not the default traceback.Final Answer:
The message: 'Something went wrong, please try later.' with status 500 -> Option AQuick Check:
Custom error message shown = The message: 'Something went wrong, please try later.' with status 500 [OK]
- Expecting Flask's default error page instead of custom message
- Thinking a blank page will appear
- Confusing 500 error with 404 error page
@app.errorhandler(403)
def forbidden():
return 'Access denied', 403Solution
Step 1: Check function signature for errorhandler
Flask error handler functions must accept the error argument to receive error details.Step 2: Identify missing error parameter
The functionforbiddenlacks the requirederrorparameter.Final Answer:
The function must accept an error parameter -> Option CQuick Check:
Error handler function needs error param = The function must accept an error parameter [OK]
- Omitting the error parameter in handler functions
- Using wrong decorator names
- Assuming JSON response is mandatory
Solution
Step 1: Understand catching all exceptions
Using@app.errorhandler(Exception)catches all unhandled errors globally.Step 2: Provide user-friendly message without debug info
Returning a simple message hides technical details, improving user experience and security.Final Answer:
Use @app.errorhandler(Exception) to catch all errors and return a simple message -> Option DQuick Check:
Global error handler with simple message = Use@app.errorhandler(Exception)to catch all errors and return a simple message [OK]
- Enabling debug mode in production
- Relying on default Flask error pages
- Using routes instead of error handlers for errors
Ready to prove it?
Pass the test and this pattern moves unknown
