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
모듈에서 기본적인 에러 처리 방법을 소개했습니다. 예외 처리를 통해 웹 요청을 안전하고 신뢰할 수 있도록 만들 수 있습니다.