[python] 요청에 대한 예외 처리 방법

본 글은 Python에서 요청을 보낼 때 발생할 수 있는 예외 상황에 대한 처리 방법에 대해 알아보겠습니다.

Python에서 요청을 보낼 때는 주로 requests 라이브러리를 사용합니다. 이 라이브러리를 이용하여 HTTP 요청을 보낼 때, 일부 예외 상황이 발생할 수 있습니다. 이러한 상황에 대한 예외 처리는 코드의 안정성과 신뢰성을 높이는 데 매우 중요합니다. 아래에서 몇 가지 예외 상황과 그에 대한 처리 방법을 살펴보겠습니다.

1. 네트워크 연결 오류 처리

네트워크 연결 오류는 서버가 응답하지 않거나, 인터넷 연결이 끊겨있는 등의 문제가 발생했을 때 발생할 수 있습니다. 이 경우 requests.exceptions.RequestException 예외가 발생하며, 이를 처리하기 위해 try-except 구문을 사용할 수 있습니다.

import requests

try:
    response = requests.get('https://www.example.com')
    response.raise_for_status()  # HTTP 오류 발생시 예외 발생
except requests.exceptions.RequestException as e:
    print('요청 에러:', e)

2. 응답 코드 검사

서버로부터 받은 응답 코드를 검사하여 원하는 조건에 맞지 않는 경우 예외를 발생시킬 수 있습니다. 보통 200번대 코드는 요청이 성공한 것을 의미하며, 이 외의 코드는 에러를 나타냅니다. response.raise_for_status() 메서드를 사용하여 이를 처리할 수 있습니다.

import requests

response = requests.get('https://www.example.com')
try:
    response.raise_for_status()  # HTTP 오류 발생시 예외 발생
except requests.exceptions.HTTPError as e:
    print('응답 에러:', e)

3. 응답 데이터 분석

서버로부터 받은 응답 데이터를 다양한 방법으로 분석할 수 있습니다. 예를 들어, JSON 형식의 응답 데이터를 파싱하고 원하는 값을 가져올 수 있습니다.

import requests

response = requests.get('https://api.example.com/data')
try:
    response.raise_for_status()  # HTTP 오류 발생시 예외 발생
    data = response.json()  # JSON 데이터로 변환
    value = data['value']  # 원하는 값을 추출
    print('value:', value)
except (requests.exceptions.RequestException, requests.exceptions.JSONDecodeError) as e:
    print('에러:', e)

4. 타임아웃 처리

요청을 보낼 때, 서버로부터 응답을 기다리는 시간을 지정할 수 있습니다. 이를 타임아웃이라고 합니다. 타임아웃 시간을 초과하면 requests.exceptions.Timeout 예외가 발생합니다.

import requests

try:
    response = requests.get('https://www.example.com', timeout=5)
    response.raise_for_status()  # HTTP 오류 발생시 예외 발생
except requests.exceptions.Timeout as e:
    print('타임아웃 에러:', e)

결론

Python에서 요청을 보낼 때 예외 처리는 매우 중요합니다. 네트워크 연결 오류, 응답 코드 오류, 응답 데이터 분석, 타임아웃 등 다양한 상황에 대한 예외 처리를 적절히 수행함으로써 안정적인 코드를 작성할 수 있습니다. requests 라이브러리의 예외 처리 기능을 적극적으로 활용하여 보다 효율적인 코드를 작성해보세요.

참고: requests documentation