FastAPI - Exception

2025. 9. 2. 10:22Programming Language/Python

반응형

API는 성공에 대해서 뿐만 아니라 실패에 대해서도 알려줘야만 한다.

이를 위해서 보통의 언어들에서는 모두 Exception에 대한 처리가 필요하다 

이걸 FastAPI 프레임 워크에서는 어떻게 처리하는지에 대해서 한번 알아보자.

 

1. Exception

먼저 FastAPI에서는 이 Exception을 처리하기 위해서 HTTPException이라는 모듈을 제공한다.

먼저 HTTPException을 import 하고 

함수를 하나 만들고 파라미터 id를 하나 받아보자.

여기서 이 함수에서 id라는 값이 무조건 필요하다면 혹은 id가 0일 경우는 에러라고 알리고 싶다면 이에 대한 분기조건을 하나 만들어준다.

여기서 raise를 통해서 HTTPException을 불러주고 

이제 이 HTTPException 내부에 status와 해당 에러에 대한 정보를 전달해줘야한다 

 

먼저 내부 속성중 status_code는

이런식으로도 설정이 가능하나 가독성이 더 좋게 하기 위해서 fastapi의 status 모듈을 import 하고

 status내부의 상수로 선언되어 있는 

status를 찾아 입력해주자.

status 모듈 내부에 이렇게 상수로 맵핑되어 있는 값들이다.

 

이제 해당 오류에 대한 상세 내용을 detail이라는 속성으로 넣는데 이때는 그냥 단순하게 어떤 내용인지에 대해서 문자열로 작성하면 된다.

저장하고 postman으로 요청을 보내보면

이렇게 에러코드와 함께 detail 값이 들어오게 된다.

 

2. 직접 Exception Handling

위에 경우는 직접 HTTPException을 불러서 핸들링 한것으로 HTTP가 알아서 핸들링을 해줬으나 fastapi의 responses라는 모듈 내부의 JSONResponse를 통해서 직접 Exception을 핸들링 할 수 도 있다.

 

먼저 fastapi의 responses에서 JSONResponse를 import해주고

exception을 처리할 핸들러 함수를 생성해주자.

그리고 여기서 JSONResponse를 return해주고

그리고 이제 데코레이터로 app의 exception_handler를 넣어주자

 

 

이러고 이제 공통으로 에러를 잡아줄 공통 에러 클래스를 하나 만들어주자.

해당 클래스는 Exception 클래스를 상속해주고

내부에 init 함수를 하나 생성해주자 

그리고 해당 init 함수를 통해서 message(상세내용), status_code, code(요약 내용)를 받아주도록 파라미터로 넣어주자.

여기까지가 공통되는 에러를 핸들링할 클래스가 생성되었다.

 

이제 이 공통 클래스를 이전에 만들었던 핸들링 함수의 데코레이터에 넣어주고

해당 함수의 매개변수에 request와 공통에러 클래스를 받아주자.

그리고 JSONResponse의 status_code에 공통 클래스의 status_code를 넣어주자.

그리고 content 속성을 추가해주고 dict형태로 exception의 응답 형태가 어떤식으로 구성될지를 작성해준다.

여기에는 code, message등이 추가될 수 있다.

여기까지가 기본적인 형태이다.

 

이제 여기에 내가 원하는 상황에 따라 클래스를 하나씩 만들어주면 된다

먼저 위에서 봤던것 처럼 id가 들어오지 않아서 기본값만을 응답하는 경우에 대해서 예외 클래스를 만든다면 먼저 기본적인 클래스의 형태를 생성해주고

기본 예외 클래스를 상속해주자.

그리고 여기선 방법이 두가지가 있는데 상속했기에 내부의 멤버들의 명칭을 동일하게 해서 할당하는 방법이 있고

클래스 내부에 init 함수를 만들어서 여기에 값을 넣는 방법이 있다.

이러고 이전에 HTTPResponse를 raise했던 부분을 해당 클래스를 불러주면 

예외처리가 된 것이다.

 

이제 id 없이 요청을 보내보면

이렇게 400에러고 코드와 메세지 모두 잘 출력된다.

 

여기서 만약에 id의 중복에 대해서 예외 처리를 한다고 한다면

이렇게 중복에 대한 클래스를 하나 추가해주고

이렇게 기존 ID를 만들어주고 이거랑 동일한 경우에 해당 클래스를 불러 예외로 던지면

이렇게 다른 값일땐 응답을 해주고 

지정된 중복된 값에 대해서는 예외를 던져주는 것을 볼 수 있다.

 

여기에 맞춰서 이제 원하는 형태의 예외 클래스를 각각 생성해서 받아주는 방법으로 예외처리를 할 수 있다.

반응형

'Programming Language > Python' 카테고리의 다른 글

FastAPI - 의존성 주입  (0) 2025.09.03
Fast API - 라우팅 데코레이터의 속성  (1) 2025.09.02
FastAPI - Form Data 받기  (1) 2025.09.01
FastAPI - 응답모델  (1) 2025.09.01
FastAPI - example  (1) 2025.08.29