[파이썬] requests 기본적인 에러 처리 방법

Python의 requests 라이브러리는 웹 요청을 보내고 응답을 받는데 매우 유용합니다. 하지만 네트워크나 서버의 문제로 인해 오류가 발생할 수 있습니다. 이러한 오류를 처리하는 것은 중요한 요소입니다. 이번 글에서는 requests 라이브러리에서 기본적인 에러 처리 방법을 알아보겠습니다.

1. 예외 처리

requests 모듈을 사용할 때, 네트워크나 서버 오류에 대한 예외 처리는 필수입니다. 가장 보편적인 예외는 requests.exceptions.RequestException입니다. 이 예외는 requests 라이브러리 내에서 발생할 수 있는 모든 예외의 부모 예외입니다. 따라서 이 예외를 처리함으로써 대부분의 오류를 다룰 수 있습니다.

import requests

try:
    response = requests.get("https://example.com")
    response.raise_for_status()  # 응답이 성공적으로 받아졌는지 확인
except requests.exceptions.RequestException as err:
    print(f"에러 발생: {err}")

위의 예제는 requests.get() 메소드를 사용하여 https://example.com에 GET 요청을 보냅니다. 예외 처리문으로, requests.exceptions.RequestException을 잡고 해당 오류를 처리합니다.

response.raise_for_status() 메소드를 사용하면, 서버에서 응답을 받았을 때 해당 응답이 성공인지 확인할 수 있습니다. 만약 응답이 성공적으로 받아지지 않았을 경우, HTTPError 예외가 발생합니다.

2. 특정 에러 처리

특정한 에러에 대해서만 예외 처리를 할 수도 있습니다. 예를 들어, requests.exceptions.HTTPError 예외를 처리하기 위해서는 다음과 같이 코드를 작성할 수 있습니다.

import requests

try:
    response = requests.get("https://example.com")
    response.raise_for_status()
except requests.exceptions.HTTPError as err:
    print(f"HTTP에러 발생: {err}")

위의 코드는 위에서 예시로 든 코드와 거의 비슷합니다. 다른 점은, 예외 처리문에서 HTTPError 예외를 잡고 해당 오류를 따로 처리하고 있다는 것입니다.

3. Retry 기능

때로는 네트워크나 서버 문제로 인해 요청이 실패할 수도 있습니다. 이런 경우에는 요청을 재시도하는 것이 유용할 수 있습니다. requests 라이브러리는 Retry 객체를 사용하여 이를 지원합니다.

다음은 Retry 객체를 사용하여 요청을 3번 재시도하는 예제입니다.

import requests
from requests.adapters import Retry

retry_strategy = Retry(
    total=3,
    backoff_factor=1,
    status_forcelist=[500, 502, 503, 504],
    method_whitelist=["HEAD", "GET", "OPTIONS"]
)

session = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)

try:
    response = session.get("https://example.com")
    response.raise_for_status()
except requests.exceptions.RequestException as err:
    print(f"에러 발생: {err}")

위의 예제에서는 Retry 객체를 생성하고, status_forcelist 옵션에 대해 HTTP 상태 코드 500, 502, 503, 504가 오류로 간주되도록 지정했습니다. max_retries 옵션을 사용하여 최대 재시도 횟수를 지정할 수 있습니다.

Retry 객체를 생성하고, requests.Session()으로 세션을 생성한 뒤, requests.adapters.HTTPAdapter를 사용하여 세션에 Retry 객체를 연결합니다. 그리고 나서 session.get() 메소드를 사용하여 GET 요청을 보냅니다.

결론

requests 라이브러리를 사용할 때 예외 처리는 중요한 부분입니다. 이 글에서는 requests 모듈에서 기본적인 에러 처리 방법을 소개했습니다. 예외 처리를 통해 웹 요청을 안전하고 신뢰할 수 있도록 만들 수 있습니다.