📖 Scenario: You are building a simple Flask web app for a small business website. You want to make sure visitors see friendly messages if they visit a page that does not exist or if the server has an error.
🎯 Goal: Create custom error pages for HTTP 404 (page not found) and 500 (server error) in a Flask app. When users hit these errors, they should see your custom messages instead of the default plain error pages.
📋 What You'll Learn
Create a Flask app instance named app
Define a route / that returns a welcome message
Create a custom error handler for 404 errors that returns a friendly message
Create a custom error handler for 500 errors that returns a friendly message
💡 Why This Matters
🌍 Real World
Custom error pages improve user experience by showing friendly messages instead of confusing default errors. This is common in all web applications.
💼 Career
Knowing how to handle errors gracefully in Flask is important for backend web developers to build professional and user-friendly web apps.
Progress0 / 4 steps
1
Set up the Flask app and a home route
Import Flask from flask and create a Flask app instance called app. Then define a route for / that returns the string "Welcome to our website!".
Flask
Hint
Use app = Flask(__name__) to create the app. Use @app.route('/') to define the home page route.
2
Add a custom 404 error handler
Define a function called page_not_found that takes a parameter error. Use the @app.errorhandler(404) decorator on this function. Return the string "Sorry, the page you requested was not found." and the status code 404.
Flask
Hint
Use @app.errorhandler(404) above the function. Return the message and the status code 404 as a tuple.
3
Add a custom 500 error handler
Define a function called internal_error that takes a parameter error. Use the @app.errorhandler(500) decorator on this function. Return the string "Oops! Something went wrong on our end." and the status code 500.
Flask
Hint
Use @app.errorhandler(500) and return the message with status code 500.
4
Add the app run command
Add the code to run the Flask app only if the script is run directly. Use if __name__ == '__main__': and inside it call app.run(debug=True).
Flask
Hint
Use the standard Python check if __name__ == '__main__': to run the app with debug mode on.
Practice
(1/5)
1. What is the main purpose of creating custom error pages like 404 or 500 in a Flask app?
easy
A. To show friendly messages instead of default error text
B. To speed up the server response time
C. To disable error logging
D. To automatically fix bugs in the code
Solution
Step 1: Understand default error behavior
By default, Flask shows plain error messages like '404 Not Found' which are not user-friendly.
Step 2: Purpose of custom error pages
Custom error pages replace these default messages with nicer, clearer pages that help users understand the problem.
Final Answer:
To show friendly messages instead of default error text -> Option A
Quick Check:
Custom error pages = Friendly messages [OK]
Hint: Custom error pages improve user experience with friendly messages [OK]
Common Mistakes:
Thinking custom pages fix server speed
Believing they disable error logs
Assuming they auto-correct bugs
2. Which of the following is the correct way to define a custom 404 error handler in Flask?
easy
A. @app.handle_error(404)
def not_found(error):
return 'Page not found', 404
B. @app.route('/404')
def not_found():
return 'Page not found', 404
C. @app.errorhandler(404)
def not_found(error):
return 'Page not found', 404
D. @app.error(404)
def not_found(error):
return 'Page not found', 404
Solution
Step 1: Identify correct decorator for error handling
Flask uses @app.errorhandler(error_code) to register error handlers.
Step 2: Check function signature and return
The handler function takes an error argument and returns a response with the error code.
Final Answer:
@app.errorhandler(404)\ndef not_found(error):\n return 'Page not found', 404 -> Option C
Quick Check:
@app.errorhandler(404) = Correct syntax [OK]
Hint: Use @app.errorhandler(code) to define error handlers [OK]
Common Mistakes:
Using @app.route instead of @app.errorhandler
Wrong decorator names like @app.handle_error
Missing error parameter in handler function
3. Given this Flask code snippet, what will be the output when a user visits a non-existing page?
A. The handler function must accept an error parameter
B. The decorator should be @app.handle_error(500)
C. The return statement must not include the status code
D. The function name must be 'handle_500_error'
Solution
Step 1: Check function signature for error handlers
Flask error handlers must accept one argument for the error object.
Step 2: Verify the given function signature
The function internal_error() has no parameters, which is incorrect for error handlers.
Final Answer:
The handler function must accept an error parameter -> Option A
Quick Check:
Error handler functions need error argument [OK]
Hint: Error handlers always take one error argument [OK]
Common Mistakes:
Omitting the error parameter in handler function
Using wrong decorator names
Thinking function name matters for error handlers
5. You want to create a custom 404 error page that renders an HTML template named '404.html' and returns status 404. Which Flask code snippet correctly does this?
hard
A. @app.route('/404')
def not_found():
return render_template('404.html'), 404
B. @app.errorhandler(404)
def not_found(error):
return render_template('404.html'), 404
C. @app.errorhandler(404)
def not_found():
return render_template('404.html')
D. @app.errorhandler(404)
def not_found(error):
return render_template('404.html', status=404)
Solution
Step 1: Use correct decorator and function signature
Use @app.errorhandler(404) and define function with error parameter.
Step 2: Return rendered template with status code
Return render_template('404.html') and the status code 404 as a tuple.
Final Answer:
@app.errorhandler(404)\ndef not_found(error):\n return render_template('404.html'), 404 -> Option B
Quick Check:
Custom 404 with template and status code = @app.errorhandler(404)
def not_found(error):
return render_template('404.html'), 404 [OK]
Hint: Return (render_template, status_code) tuple in error handler [OK]
Common Mistakes:
Using @app.route instead of @app.errorhandler
Missing error parameter in function
Not returning status code with template
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.