Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Using HTTPException in FastAPI
📖 Scenario: You are building a simple FastAPI web service that returns user information. You want to handle cases where the requested user does not exist by sending a proper HTTP error response.
🎯 Goal: Create a FastAPI app with a route /users/{user_id} that returns user data if found. If the user ID is not in the data, raise an HTTPException with status code 404 and a clear error message.
📋 What You'll Learn
Create a dictionary called users with these exact entries: 1: {'name': 'Alice'}, 2: {'name': 'Bob'}, 3: {'name': 'Charlie'}
Create a FastAPI app instance called app
Create a GET route /users/{user_id} that accepts an integer user_id
Inside the route, check if user_id is in users
If user_id is not found, raise HTTPException(status_code=404, detail='User not found')
If found, return the user data dictionary for that user_id
💡 Why This Matters
🌍 Real World
Web APIs often need to handle missing data gracefully by sending proper HTTP error codes and messages.
💼 Career
Knowing how to use HTTPException in FastAPI is essential for backend developers building robust APIs.
Progress0 / 4 steps
1
Create the user data dictionary
Create a dictionary called users with these exact entries: 1: {'name': 'Alice'}, 2: {'name': 'Bob'}, 3: {'name': 'Charlie'}
FastAPI
Hint
Use curly braces to create a dictionary. Keys are numbers 1, 2, 3. Values are dictionaries with key 'name' and the exact names.
2
Create the FastAPI app instance
Import FastAPI from fastapi and create an app instance called app by calling FastAPI()
FastAPI
Hint
Use from fastapi import FastAPI and then app = FastAPI() to create the app.
3
Create the GET route with user_id parameter
Import HTTPException from fastapi. Create a GET route /users/{user_id} using @app.get. Define a function get_user that takes an integer parameter user_id. Inside the function, check if user_id is in users. If not, raise HTTPException(status_code=404, detail='User not found'). If found, return users[user_id].
FastAPI
Hint
Use @app.get('/users/{user_id}') to create the route. Use if user_id not in users: to check. Raise HTTPException with status 404 and detail message if missing.
4
Complete the FastAPI app with proper imports and route
Ensure the code imports FastAPI and HTTPException from fastapi. The app instance is called app. The GET route /users/{user_id} is defined with function get_user(user_id: int). The function raises HTTPException(status_code=404, detail='User not found') if the user is missing, else returns the user data from users dictionary.
FastAPI
Hint
Review your code to confirm all parts are present and correct.
Practice
(1/5)
1. What is the main purpose of using HTTPException in FastAPI?
easy
A. To create database models automatically
B. To define API routes
C. To handle user authentication
D. To send HTTP error responses with a status code and message
Solution
Step 1: Understand HTTPException role
HTTPException is designed to send HTTP error responses with specific status codes and messages.
Step 2: Compare with other options
Other options like database models, authentication, or route definition are unrelated to HTTPException's purpose.
Final Answer:
To send HTTP error responses with a status code and message -> Option D
Quick Check:
HTTPException = send error response [OK]
Hint: HTTPException sends errors, not data or routes [OK]
Common Mistakes:
Confusing HTTPException with route creation
Thinking it manages database or authentication
Using it to send successful responses
2. Which of the following is the correct way to raise an HTTP 404 error with a message in FastAPI?
easy
A. return HTTPException(404, "Item not found")
B. raise HTTPException(status_code=404, detail="Item not found")
C. HTTPException(404, detail="Item not found")
D. raise HTTPException(404, message="Item not found")
Solution
Step 1: Check correct syntax for raising HTTPException
The correct syntax uses raise HTTPException(status_code=404, detail="Item not found").
Step 2: Identify errors in other options
return HTTPException(404, "Item not found") wrongly uses return instead of raise. HTTPException(404, detail="Item not found") misses raise keyword. raise HTTPException(404, message="Item not found") uses incorrect keyword 'message' instead of 'detail'.
Final Answer:
raise HTTPException(status_code=404, detail="Item not found") -> Option B
Quick Check:
Use raise + status_code + detail [OK]
Hint: Always use raise with status_code and detail keys [OK]
Common Mistakes:
Using return instead of raise
Missing status_code or detail keywords
Using wrong keyword like message
3. What will happen when this FastAPI endpoint is called and the item is not found?
from fastapi import FastAPI, HTTPException
app = FastAPI()
items = {"apple": "A juicy fruit"}
@app.get("/items/{item_name}")
async def read_item(item_name: str):
if item_name not in items:
raise HTTPException(status_code=404, detail="Item not found")
return {"item": items[item_name]}
medium
A. The API returns the string 'Item not found'
B. The API returns an empty JSON response
C. The API returns a 404 error with message 'Item not found'
D. The API crashes with a server error
Solution
Step 1: Analyze the condition for missing item
If the requested item_name is not in the items dictionary, the code raises HTTPException with status 404 and detail message.
Step 2: Understand FastAPI behavior on HTTPException
FastAPI catches HTTPException and sends an HTTP response with the given status code and detail message as JSON.
Final Answer:
The API returns a 404 error with message 'Item not found' -> Option C
Quick Check:
Missing item triggers HTTPException 404 [OK]
Hint: Missing item triggers HTTPException with 404 [OK]
Common Mistakes:
Expecting empty or string response instead of error
Thinking the server crashes
Ignoring the raise keyword effect
4. Identify the error in this FastAPI code snippet:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/users/{user_id}")
def get_user(user_id: int):
if user_id < 0:
HTTPException(status_code=400, detail="Invalid user ID")
return {"user_id": user_id}
medium
A. Missing raise keyword before HTTPException
B. Incorrect status_code value for error
C. user_id should be a string, not int
D. The endpoint path is invalid
Solution
Step 1: Check how HTTPException is used
The code calls HTTPException but does not use raise, so the exception is not actually raised.
Step 2: Verify other parts
Status code 400 is valid for bad request. user_id as int is correct. Endpoint path syntax is valid.
Final Answer:
Missing raise keyword before HTTPException -> Option A
Quick Check:
Always use raise before HTTPException [OK]
Hint: Use raise before HTTPException to trigger error [OK]
Common Mistakes:
Calling HTTPException without raise
Using wrong status codes for errors
Confusing parameter types
5. You want to create a FastAPI endpoint that returns a 403 Forbidden error with a custom message if a user is not an admin. Which code snippet correctly implements this?
hard
A. if not is_admin:
raise HTTPException(status_code=403, detail="Access denied: Admins only")
B. if not is_admin:
return HTTPException(status_code=403, detail="Access denied: Admins only")
C. if not is_admin:
raise HTTPException(403, message="Access denied: Admins only")
D. if not is_admin:
HTTPException(status_code=403, detail="Access denied: Admins only")
Solution
Step 1: Check correct way to raise HTTPException with 403
The correct way is to use raise with status_code=403 and detail message.
Step 2: Identify errors in other options
if not is_admin:
return HTTPException(status_code=403, detail="Access denied: Admins only") uses return instead of raise, so no error is raised. if not is_admin:
raise HTTPException(403, message="Access denied: Admins only") uses wrong keyword 'message'. if not is_admin:
HTTPException(status_code=403, detail="Access denied: Admins only") calls HTTPException without raise, so no exception is triggered.
Final Answer:
if not is_admin:
raise HTTPException(status_code=403, detail="Access denied: Admins only") -> Option A
Quick Check:
Use raise + status_code + detail for errors [OK]
Hint: Raise HTTPException with status_code and detail for errors [OK]