📖 Scenario: You are building a simple Flask web app that returns user information based on user ID. Sometimes the user ID might not exist, so you need to handle errors gracefully.
🎯 Goal: Create a Flask app with a route /user/<int:user_id> that returns user data. Add exception handling to return a friendly error message if the user ID is not found.
📋 What You'll Learn
Create a dictionary called users with exact entries: 1: 'Alice', 2: 'Bob', 3: 'Charlie'
Create a Flask app instance called app
Create a route /user/<int:user_id> that returns the user name for the given user_id
Add exception handling using try and except KeyError to catch missing user IDs
Return a JSON response with {'error': 'User not found'} and status code 404 when user ID is missing
💡 Why This Matters
🌍 Real World
Web apps often need to handle errors gracefully when users request data that might not exist. This project shows how to do that in Flask.
💼 Career
Knowing how to handle exceptions in web routes is essential for backend developers to build reliable and user-friendly APIs.
Progress0 / 4 steps
1
Create user data dictionary
Create a dictionary called users with these exact entries: 1: 'Alice', 2: 'Bob', and 3: 'Charlie'.
Flask
Hint
Use curly braces {} to create the dictionary with keys as integers and values as strings.
2
Create Flask app instance
Import Flask from flask and create a Flask app instance called app.
Flask
Hint
Use Flask(__name__) to create the app instance.
3
Create user route with exception handling
Create a route /user/<int:user_id> using @app.route. Inside the route function get_user, use try and except KeyError to return the user name from users[user_id]. If the user ID is missing, return a JSON response {'error': 'User not found'} with status code 404. Import jsonify from flask to create JSON responses.
Flask
Hint
Use @app.route decorator and a function named get_user with parameter user_id. Use jsonify to return JSON responses.
4
Add app run block
Add the standard Flask app run block: if __name__ == '__main__': and inside it call app.run(debug=True) to start the server in debug mode.
Flask
Hint
This block runs the Flask app only if the script is executed directly.
Practice
(1/5)
1. What is the main purpose of using @app.errorhandler in a Flask route?
easy
A. To connect to a database automatically
B. To define a new route in the Flask app
C. To catch specific errors and return custom responses
D. To start the Flask application server
Solution
Step 1: Understand the role of @app.errorhandler
This decorator is used to catch exceptions or errors that happen during request handling.
Step 2: Purpose in routes
It allows you to return a custom message or page instead of a default error, improving user experience.
Final Answer:
To catch specific errors and return custom responses -> Option C
Quick Check:
Error handling = catch and respond [OK]
Hint: Errorhandler decorates functions to catch errors in routes [OK]
Common Mistakes:
Confusing errorhandler with route decorator
Thinking it starts the server
Assuming it connects to databases
2. Which of the following is the correct syntax to handle a 404 error in Flask?
easy
A. @app.errorhandler(404)
def not_found(error):
return 'Page not found', 404
B. @app.route(404)
def not_found():
return 'Page not found'
C. @app.errorhandler('404')
def not_found(error):
return 'Page not found', 404
D. @app.errorhandler(404)
def not_found():
return 'Page not found'
Solution
Step 1: Check the decorator usage
The correct decorator is @app.errorhandler(404) with the status code as an integer.
Step 2: Verify function signature and return
The handler function should accept an error argument and return a response with the status code.
Final Answer:
@app.errorhandler(404)\ndef not_found(error):\n return 'Page not found', 404 -> Option A
Quick Check:
Correct decorator and function signature = A [OK]
Hint: Use integer status code and error parameter in handler [OK]
Common Mistakes:
Using @app.route instead of @app.errorhandler
Passing status code as string '404'
Missing error parameter in handler function
3. Given this Flask code snippet, what will be the output when accessing /divide/10/0?
from flask import Flask
app = Flask(__name__)
@app.route('/divide/<int:a>/<int:b>')
def divide(a, b):
try:
result = a / b
return str(result)
except ZeroDivisionError:
return 'Cannot divide by zero', 400
medium
A. ZeroDivisionError exception traceback
B. 0
C. 10
D. Cannot divide by zero with HTTP status 400
Solution
Step 1: Analyze the route and input
The route divides a by b. Input is 10 and 0, so division by zero occurs.
Step 2: Check exception handling
The ZeroDivisionError is caught, returning 'Cannot divide by zero' with status 400.
Final Answer:
Cannot divide by zero with HTTP status 400 -> Option D
Quick Check:
ZeroDivisionError caught returns message and 400 [OK]
Hint: Try-except catches zero division, returns error message [OK]
Common Mistakes:
Expecting a crash or traceback
Ignoring the exception handling block
Assuming division returns 0
4. Identify the error in this Flask route error handling code:
@app.errorhandler(500)
def internal_error():
return 'Internal Server Error', 500
medium
A. The handler function must accept an error parameter
B. The status code 500 is invalid for errorhandler
C. The return statement should not include status code
D. The decorator should be @app.route, not @app.errorhandler
Solution
Step 1: Check function signature for errorhandler
Functions decorated with @app.errorhandler must accept one parameter for the error.
Step 2: Verify other parts
Status code 500 is valid, return with status code is correct, and decorator usage is correct.
Final Answer:
The handler function must accept an error parameter -> Option A
Quick Check:
Errorhandler function needs error argument [OK]
Hint: Errorhandler functions always take an error argument [OK]
Common Mistakes:
Omitting the error parameter in handler function
Using wrong decorator for error handling
Returning without status code
5. You want to handle both 404 and 500 errors in your Flask app with custom JSON responses. Which approach correctly implements this?
hard
A. Use one function with @app.errorhandler([404, 500]) to handle both errors
B. Define two separate functions with @app.errorhandler(404) and @app.errorhandler(500), returning JSON and status codes
C. Handle errors inside each route function with try-except blocks only
D. Set app.config['ERROR_404_JSON'] = True and Flask will auto-handle JSON errors
Solution
Step 1: Understand Flask errorhandler usage
Flask requires separate functions for different error codes with their own decorators.
Step 2: Confirm JSON response and status code
Each handler should return a JSON response and the correct HTTP status code for clarity.
Final Answer:
Define two separate functions with @app.errorhandler(404) and @app.errorhandler(500), returning JSON and status codes -> Option B
Quick Check:
Separate handlers per error code = A [OK]
Hint: Use separate errorhandler functions for each error code [OK]
Common Mistakes:
Trying to handle multiple errors in one function decorator
Relying only on try-except inside routes
Assuming Flask auto-converts errors to JSON
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.