Backend/FastAPI

[FastAPI] HTTPException과 Exception 예외처리의 목적과 사용방법

지미닝 2024. 6. 7. 10:45

FastAPI에서 주로 발생시키는 에러는 HTTPException, Exception이 있다. 

프로젝트를 진행함에 따라서 예외 핸들링을 하게 되는데, 이 두 가지 간에 혼용하여 사용할 경우가 있어 이를 바르게 사용하고자 정리해보겠다.

 

1. HTTPException


HTTPException은 FastAPI에서 HTTP 요청 처리 중에 발생할 수 있는 특정 예외를 처리하기 위해 사용됩니다. 특히나, 주로 클라이언트에게 HTTP 상태 코드와 함께 명확한 오류 메시지를 반환하고자 할 때 사용된다.

 

주로, 잘못된 요청, 인증 실패, 리소스 없음 등과 같은 HTTP 관련 오류를 명시적으로 나타내기 위해 사용된다.

 

✔️ HTTPException의 특징

  • HTTP 상태 코드
    • status_code를 인자로 받아 반환할 HTTP 상태 코드를 지정한다.
  • 에러메시지
    • detail을 인자로 받아 클라이언트에 전달할 오류 메시지를 포함할 수 있다.
  • 헤더 추가 가능
    • 필요에 따라 HTTP 응답 헤더를 추가할 수 있다.
from fastapi import FastAPI, HTTPException

app = FastAPI()

items = {"foo": "The Foo Wrestlers"}


@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]}

 

https://fastapi.tiangolo.com/reference/exceptions/

 

Exceptions - HTTPException and WebSocketException - FastAPI

FastAPI framework, high performance, easy to learn, fast to code, ready for production

fastapi.tiangolo.com

 

2. Exception


Exception은 Python에서 기본 예외 클래스이며, 일반적으로 모든 예외의 기반 클래스다. 일반적인 오류와 예외를 처리하기 위해 사용된다.

 

주로 비 HTTP 관련 오류를 처리하거나, HTTPException을 처리할 수 없는 상황에서 사용된다.

 

✔️ Exception의 특징

 

  • 포괄적 사용
    • Exception은 거의 모든 종류의 예외를 나타내고 처리하는 데 사용된다.
  • 구체화 필요
    • HTTP 응답과 관련된 상세한 처리를 위해서는 구체적인 예외 클래스를 정의하거나 HTTPException으로 변환해서 처리해야 한다.
from fastapi import FastAPI, HTTPException

app = FastAPI()

@app.get("/divide")
async def divide(a: int, b: int):
    try:
        result = a / b
    except ZeroDivisionError:
        raise HTTPException(status_code=400, detail="Division by zero is not allowed")
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))
    return {"result": result}

 

 

3. 두 가지의 주요한 차이점


 

  • 의도 및 사용 목적:
    • HTTPException: HTTP 응답과 관련된 특정 오류를 처리하여 클라이언트에게 명확한 상태 코드와 메시지를 반환하는 데 사용된다.
    • Exception: 일반적인 예외 처리를 위해 사용되며, HTTP 응답과 직접적인 연관이 없다.
  • HTTP 관련성:
    • HTTPException: HTTP 상태 코드와 관련된 예외로 HTTP 프로토콜에 맞는 응답을 제공하는 데 사용된다.
    • Exception: HTTP와 상관없이 일반적인 프로그래밍 오류를 처리하는 데 사용된다.
  • 사용 사례:
    • HTTPException: 잘못된 요청, 인증 문제, 권한 문제 등과 같이 HTTP 요청과 관련된 예외 상황에 주로 사용된다.
    • Exception: 파일 입출력 오류, 데이터베이스 연결 오류, 타입 오류 등 다양한 프로그래밍 오류에 사용된다.

 

4. 한 줄 요약


HTTPException은 주로 HTTP 요청과 관련된 예외 상황을 처리하고 클라이언트에게 적절한 HTTP 응답을 제공하기 위해 사용되며, Exception은 일반적인 프로그래밍 오류를 포괄적으로 처리하는 데 사용된다.