지난 실습에 이어 FastAPI 애플리케이션 book project 에서 HTTP 예외 구현하는 방법을 알아보자.
이를 위해 우선 fastapi 에서 HTTPException 을 임포트한다.
import fastapi import FastAPI, Path, Query, HTTPException
추가를 했다면 지난번 프로젝트에 이어
만약 id 로 책을 검색할 때 책을 찾을 수 없다면 HTTPException 을 발생시킨다. 상태코드는 404이고 detail 은 'Item not found' 을 입력한다.
@app.get("/books/{book_id}")
async def read_book(book_id: int = Path(gt=0)):
for book in BOOKS:
if book.id == book_id:
return book
raise HTTPException(status_code=404, detail='Item not found')
스웨거로 가서 테스트를 해보자.
존재하지 않을만한 아이디를 입력한 후 실행하면,

지정했던 응답(404)을 받을 수 있다

다음은 지난 시간 만들었던 update_book 함수도 에러 처리를 해줄 것이다.
우선 book_chanaged 라는 flag 를 만들어서 만약 업데이트가 되었다면 해당 flag 를 True 로 바꿔준다.
루프가 끝난 후 flag 가 False 라면 업데이트가 발생하지 않았음을 의미하고 이는 해당 Id 가 없다고 해석할 수 있다. 따라서 404 에러를 발생시킨다.
@app.put("/books/update_boook")
async def update_book(book: BookRequest):
book_changed = False
for i in range(len(BOOKS)):
if BOOKS[i].id == book.id:
BOOKS[i] = book
book_changed = True
if not book_changed:
raise HTTPException(status_code=404, detail='Item not found')