[파이썬] requests 요청 중 예외 처리하기

Python은 프로그래밍 언어 중에서 네트워킹 작업을 수행하기 위한 다양한 라이브러리와 모듈을 제공합니다. 그 중에서 requests는 많은 개발자들이 자주 사용하는 네트워크 요청 라이브러리입니다.

하지만 실제로 네트워크 요청을 보낼 때는 다양한 예외 상황이 발생할 수 있습니다. 예를 들어, 서버에서 응답이 없거나 네트워크 연결이 끊어진 경우 등 여러 가지 예외 상황에 대처해야 합니다.

이번 포스트에서는 requests를 사용하여 네트워크 요청을 보낼 때 발생할 수 있는 예외 상황에 대한 처리 방법에 대해 알아보겠습니다.

1. Timeout 예외 처리하기

가장 일반적인 예외 상황 중 하나는 요청이 너무 오래 걸려서 응답이 없는 경우입니다. 이런 경우를 대비하여 requests에서는 timeout 매개변수를 제공합니다. 이 매개변수를 통해 특정 시간 안에 응답을 받지 못할 경우 예외를 발생시킬 수 있습니다.

예를 들어, 5초 동안 응답을 기다리고 응답이 없을 경우 예외를 발생시키는 코드는 다음과 같습니다.

import requests

try:
    response = requests.get("https://api.example.com", timeout=5)
    # 응답 처리 코드
except requests.Timeout:
    # 타임아웃 예외 처리 코드
    print("요청이 시간 초과되었습니다.")

2. 연결 예외 처리하기

또 다른 예외 상황은 서버와의 연결이 끊어진 경우입니다. 이런 경우에도 requests에서는 requests.exceptions.ConnectionError 예외를 발생시킵니다.

아래는 연결 예외를 처리하는 예시 코드입니다.

import requests

try:
    response = requests.get("https://api.example.com")
    # 응답 처리 코드
except requests.ConnectionError:
    # 연결 예외 처리 코드
    print("서버와의 연결이 끊어졌습니다.")

3. 그 외의 예외 처리하기

네트워크 요청 중 다양한 예외 상황이 발생할 수 있습니다. 따라서 이 외에도 다양한 예외 상황에 대비하기 위해 requests에서 제공하는 예외 클래스들을 활용할 수 있습니다.

다음은 몇 가지 예시입니다.

이런 예외들을 일괄적으로 처리하려면 아래와 같은 코드를 사용할 수 있습니다.

import requests

try:
    response = requests.get("https://api.example.com")
    # 응답 처리 코드
    response.raise_for_status()
except requests.Timeout:
    # 타임아웃 예외 처리 코드
    print("요청이 시간 초과되었습니다.")
except requests.ConnectionError:
    # 연결 예외 처리 코드
    print("서버와의 연결이 끊어졌습니다.")
except requests.HTTPError as e:
    # HTTP 에러 예외 처리 코드
    print(f"HTTP 에러가 발생했습니다: {e}")
except requests.TooManyRedirects:
    # 리디렉션 예외 처리 코드
    print("너무 많은 리디렉션 요청이 발생했습니다.")
except requests.RequestException as e:
    # 기타 예외 처리 코드
    print(f"예외가 발생했습니다: {e}")

마무리

requests를 사용하여 네트워크 요청을 보낼 때 예외 처리는 매우 중요합니다. Timeout 예외, 연결 예외뿐만 아니라 다른 예외 상황에 대비하여 적절한 예외 처리 코드를 작성하는 것은 안정성과 신뢰성 있는 애플리케이션을 개발하는 데 도움이 됩니다.

requests는 다양한 예외 클래스를 제공하므로 문서를 참고하여 필요한 예외 상황에 대한 처리를 추가하는 것을 권장합니다.

Happy coding! :rocket: