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
Recall & Review
beginner
What is a custom error response model in FastAPI?
A custom error response model in FastAPI is a user-defined data structure that describes how error messages should be formatted and returned to the client, making error responses clear and consistent.
Click to reveal answer
beginner
How do you define a custom error response model in FastAPI?
You define a custom error response model by creating a Pydantic model that specifies the error fields (like code, message), then use it in the response_model parameter of exception handlers or route decorators.
Click to reveal answer
intermediate
Why use custom error response models instead of default error messages?
Custom error response models improve clarity for API users by providing structured, predictable error information. They help clients handle errors better and improve debugging.
Click to reveal answer
intermediate
Which FastAPI feature allows you to return custom error responses globally?
FastAPI's exception handlers let you catch exceptions globally and return custom error responses using your defined error response models.
Click to reveal answer
beginner
Show a simple example of a custom error response model in FastAPI.
Example: Define a Pydantic model like `class ErrorResponse(BaseModel):\n code: int\n message: str` and use it in an exception handler to return structured error info instead of plain text.
Click to reveal answer
What is the main purpose of a custom error response model in FastAPI?
ATo encrypt error messages
BTo speed up API responses
CTo automatically fix errors
DTo format error messages in a clear, structured way
✗ Incorrect
Custom error response models help format error messages clearly and consistently for API clients.
Which Python library is used to define custom error response models in FastAPI?
APydantic
BRequests
CSQLAlchemy
DNumPy
✗ Incorrect
FastAPI uses Pydantic models to define data structures, including custom error response models.
How do you apply a custom error response model to an exception in FastAPI?
ABy changing the HTTP status code only
BBy modifying the database schema
CBy creating an exception handler that returns the model
DBy using JavaScript on the client side
✗ Incorrect
You create an exception handler function that returns your custom error response model to control error output.
What is a benefit of using custom error response models for API clients?
AClients can easily understand and handle errors
BClients get faster internet speed
CClients can bypass authentication
DClients receive HTML pages
✗ Incorrect
Structured error responses help clients understand what went wrong and respond appropriately.
Which FastAPI decorator is commonly used to register a global exception handler?
A@app.get()
B@app.exception_handler()
C@app.middleware()
D@app.post()
✗ Incorrect
The @app.exception_handler() decorator registers a function to handle exceptions globally.
Explain how to create and use a custom error response model in FastAPI.
Think about how you want errors to look and how to tell FastAPI to use that format.
You got /4 concepts.
Why is it important to have consistent error responses in an API?
Imagine you are a client using an API and getting different error formats each time.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of using custom error response models in FastAPI?
easy
A. To define a clear and consistent structure for error messages returned by the API
B. To speed up the API response time
C. To automatically fix errors in the API code
D. To hide all error messages from the client
Solution
Step 1: Understand error response models
Custom error response models define how error messages look, making them clear and consistent.
Step 2: Identify the purpose in FastAPI
FastAPI uses these models to send structured error info to clients, improving API usability.
Final Answer:
To define a clear and consistent structure for error messages returned by the API -> Option A
Pydantic models are defined as classes inheriting from BaseModel with typed attributes.
Step 2: Match correct syntax
class ErrorResponse(BaseModel): message: str; code: int correctly defines a class with typed fields using BaseModel.
Final Answer:
class ErrorResponse(BaseModel): message: str; code: int -> Option B
Quick Check:
Pydantic model = class with BaseModel [OK]
Hint: Use class with BaseModel and typed fields [OK]
Common Mistakes:
Defining models as functions
Using plain dictionaries instead of classes
Missing BaseModel inheritance
3. Given this FastAPI code snippet, what will be the response when a ValueError is raised?
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from pydantic import BaseModel
app = FastAPI()
class ErrorResponse(BaseModel):
detail: str
@app.exception_handler(ValueError)
async def value_error_handler(request: Request, exc: ValueError):
return JSONResponse(
status_code=400,
content=ErrorResponse(detail=str(exc)).dict()
)
@app.get("/test")
async def test():
raise ValueError("Invalid input")
medium
A. Empty response with status 204
B. Plain text 'Invalid input' with status 500
C. {"detail": "Invalid input"} with status 400
D. JSON with key 'error' and message 'Invalid input' with status 400
Solution
Step 1: Understand exception handler behavior
The handler catches ValueError and returns JSONResponse with ErrorResponse model content and status 400.
Step 2: Check response content and status
The content is the dict form of ErrorResponse with detail set to the exception message, so JSON has key 'detail' with 'Invalid input'.
Final Answer:
{"detail": "Invalid input"} with status 400 -> Option C
Quick Check:
Exception handler returns JSON with detail key [OK]
Hint: Exception handler returns model dict as JSON with status [OK]
Common Mistakes:
Expecting plain text instead of JSON
Confusing status codes
Assuming different JSON key names
4. Identify the error in this FastAPI custom error handler code:
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
from pydantic import BaseModel
app = FastAPI()
class ErrorResponse(BaseModel):
message: str
@app.exception_handler(KeyError)
async def key_error_handler(request: Request, exc: KeyError):
return JSONResponse(
status_code=404,
content=ErrorResponse(message=exc).dict()
)
medium
A. Missing BaseModel inheritance in ErrorResponse
B. Exception handler must be synchronous, not async
C. Using status code 404 instead of 400
D. Passing the exception object directly instead of converting to string
Solution
Step 1: Check how exception is passed to model
The code passes exc (KeyError object) directly to message field which expects a string.
Step 2: Identify correct usage
It should convert exc to string with str(exc) to avoid type errors.
Final Answer:
Passing the exception object directly instead of converting to string -> Option D
Quick Check:
Exception message must be string [OK]
Hint: Convert exception to string before passing to model [OK]
Common Mistakes:
Passing exception object without str()
Confusing async/sync handler rules
Incorrect status code choice
5. You want to create a FastAPI app that returns a custom error response with fields error_code (int) and error_msg (str) whenever a RuntimeError occurs. Which of the following code snippets correctly implements this behavior?
hard
A. class CustomError(BaseModel): error_code: int; error_msg: str
@app.exception_handler(RuntimeError)
async def runtime_error_handler(request: Request, exc: RuntimeError):
return JSONResponse(status_code=500, content=CustomError(error_code=1001, error_msg=str(exc)).dict())
B. class CustomError(BaseModel): error_code: str; error_msg: int
@app.exception_handler(RuntimeError)
async def runtime_error_handler(request: Request, exc: RuntimeError):
return JSONResponse(status_code=400, content=CustomError(error_code='1001', error_msg=exc).dict())
class CustomError(BaseModel): error_code: int; error_msg: str
@app.exception_handler(RuntimeError)
async def runtime_error_handler(request: Request, exc: RuntimeError):
return JSONResponse(status_code=500, content=CustomError(error_code=1001, error_msg=str(exc)).dict()) defines CustomError inheriting from BaseModel with correct field types (int and str).
Step 2: Implement exception handler properly
class CustomError(BaseModel): error_code: int; error_msg: str
@app.exception_handler(RuntimeError)
async def runtime_error_handler(request: Request, exc: RuntimeError):
return JSONResponse(status_code=500, content=CustomError(error_code=1001, error_msg=str(exc)).dict())'s handler returns JSONResponse with status 500 and content as dict from CustomError instance, converting exception to string.
Step 3: Check other options for errors
class CustomError(BaseModel): error_code: str; error_msg: int
@app.exception_handler(RuntimeError)
async def runtime_error_handler(request: Request, exc: RuntimeError):
return JSONResponse(status_code=400, content=CustomError(error_code='1001', error_msg=exc).dict()) swaps types incorrectly and passes exc without str(); class CustomError:
def __init__(self, error_code, error_msg):
self.error_code = error_code
self.error_msg = error_msg
@app.exception_handler(RuntimeError)
async def runtime_error_handler(request: Request, exc: RuntimeError):
return JSONResponse(status_code=500, content=CustomError(1001, str(exc))) uses plain class not BaseModel and returns object not dict; @app.exception_handler(RuntimeError)
async def runtime_error_handler(request: Request, exc: RuntimeError):
return JSONResponse(status_code=500, content={'error_code': 1001, 'error_msg': str(exc)}) skips model usage.
Final Answer:
Option A correctly defines model and handler returning proper JSON response -> Option A
Quick Check:
Use BaseModel with typed fields and dict() in handler [OK]
Hint: Use BaseModel and dict() for error response content [OK]