1. 예외처리는 기본적으로 HTTPException 을 사용하면 된다
[code]
from fastapi import FastAPI, HTTPException
app = FastAPI()
items = { “foo”: “The Foo” }
@app.get(“/items/{item_id}”)
async def read_item(item_id: str):
if item_id not in items:
raise HTTPException(status_code=404, detail=”Item not found”)
return { “item”: items[item_id] }
[/code]
예외에 사용자정의 헤더 추가하기
[code]
raise HTTPException(
status_code=404,
detail=”Item not found”,
headers={ “X-Error”: “There goes my error” }
)
[/code]
2. 사용자 정의 예외처리
1) Exception 을 상속하여 예외클래스를 만든다.
2) 만들어진 클래스를 exception_hander 에 등록한다.
3) raise 를 발생시키면 클래스 타입에 의해서 등록된 핸들러가 선택되고 처리된다.
※ 기본 예외 처리기도 exception_handler 에서 처리방법을 재정의 할 수 있다.
[code]
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
class UserException(Exception):
def __init__(self, name: str):
self.name = name
app = FastAPI()
# 사용자 예외 클래스를 핸들러에 등록하고 처리방법을 구현한다
@app.exception_handler(UserException)
async def user_exception_handler(request: Request, exc: UserException):
return JSONResponse(
status_code=418,
content={ “message”: f”Oops! {exc.name} did something.” }
)
@app.get(“/unicorns/{name}”)
async def read_unicorn(name: str):
if name == “yolo”:
raise UserException(name=name)
return { “unicorn_name”: name }
[/code]