AI 초보자 QnA
질문
OpenAI Python SDK에서 요청 오류를 어떻게 나눠 처리하나요?
답변
공식 Python SDK에서는 API 호출을
try
안에 두고 연결 오류와 HTTP 오류를 서로 다른
except
에서 처리합니다. 오류를 잡았다는 이유로 답변 생성이 성공한 것은 아닙니다.
이 글은 이미 동작하는 비스트리밍 API 요청에 실패 처리 경로를 붙이는 방법입니다. 로그 수준이나 재시도 횟수를 바꾸는 설정과 구분하세요. 정상 결과를 쓰는 코드도 실패 처리와 분리합니다.
짧게 답하면
호출 범위 좁히기 → 예외 종류 나누기 → 필요한 오류 정보만 기록하기 → 정상 경로 따로 확인하기 순서입니다. 시험 환경에서 개인정보 없는 입력부터 사용하세요.
APIConnectionError
연결 문제 계열입니다. 시간 초과도 이 계열에 속합니다.
APIStatusError
HTTP 4xx·5xx 응답 계열입니다. 상태 코드와 응답 정보를 제공합니다.
else
try에서 예외가 나지 않았을 때 실행합니다. 결과 내용 검토는 별도로 합니다.
처음 쓰는 사람 기준으로 설명하면
요약 요청이 실패했는데 프로그램이 빈 결과를 저장했다고 해 보세요. 오류를 화면에만 출력하고 저장 코드를 그대로 실행했을 수 있습니다. 실패를 확인할 코드와 정상 답변을 처리할 코드의 위치부터 나눠 보세요.
OpenAI Python 문서의 Handling errors는 연결하지 못한 경우
APIConnectionError
계열을, HTTP 오류 응답에는
APIStatusError
계열을 안내합니다. 후자는
status_code
와
response
속성을 제공합니다. 응답을 받지 못한 연결 오류에서 HTTP 코드를 추정하지 않습니다.
Python은 위에서부터 처음 일치하는 except 하나를 실행합니다. 부모 예외를 먼저 잡으면 자식 예외의 처리 경로에는 도달하지 않습니다. 시간 초과를 따로 처리한다면
APITimeoutError
를
APIConnectionError
보다 앞에 두세요. 공식 SDK 구현에서 두 클래스의 상속 관계를 확인했습니다.
한 줄 정리: 구체적인 예외를 먼저, 넓은 예외를 뒤에 둡니다. 오류 유형을 나누는 일과 다시 요청할지 결정하는 일은 별개입니다.
바로 따라 해보기
1단계. API 호출만 좁게 감쌉니다.
import openai
를 추가하고 기존
client.responses.create
호출을 try 블록 안으로 옮기세요. model·input은 유지합니다. 파일 저장·메일 발송까지 같은 try 안에 섞지 말고 시험에서는 후속 변경 작업을 제외합니다.
2단계. 예외 종류에 맞는 경로를 둡니다.
except openai.APITimeoutError:
다음에
except openai.APIConnectionError:
를 둡니다. 이어
except openai.APIStatusError as exc:
에서
exc.status_code
와 제공된
exc.request_id
를 확인하세요. 각 처리 본문은 들여씁니다. 이 표기는 코드 배치 안내이며 전체 실행 예제가 아닙니다.
3단계. 정상 결과는 else에서 확인합니다.
except들과 같은 들여쓰기 수준에
else:
를 두고 반환 응답의 상태와 내용을 확인하세요. HTTP 요청이 돌아와도 생성 결과는 미완료일 수 있습니다. 복구할 수 없는 오류는 처리 블록에서
raise
로 다시 전달해 상위 작업도 실패를 알게 합니다.
주의할 점
오류 메시지나 응답 전체에는 민감 정보가 섞일 수 있습니다. 필요한 유형·상태 코드·요청 ID만 우선 남기세요. 이 글은 공식 문서 기반 절차이며 실제 SDK 요청이나 오류 응답을 재현한 실행 결과는 아닙니다.
넓은
except Exception:
에서 아무 일도 하지 않고 넘어갑니다. 입력 파일·저장 코드의 버그까지 API 오류처럼 숨길 수 있습니다.모든 HTTP 오류를 같은 대기·재시도로 처리합니다. Error codes에서 인증·권한·결제 원인을 확인하고 잘못된 설정을 먼저 고치세요.
예외가 없으면 완성된 정답이라고 생각합니다. 생성 상태·본문 검토를 계속하고 실패 경로에서 빈 답변을 완성본으로 저장하지 않습니다.
웹사이트와 앱 중 무엇부터 쓰면 좋을까요?
처리 구조는 공식 웹 문서에서
Python API library의 Handling errors와 Python의 예외 문법을 함께 읽으세요. 스트림 이벤트·Realtime 오류는 별도 계약이므로 이 비스트리밍 흐름을 그대로 적용하지 않습니다.
확인은 API를 쓰는 프로그램에서
ChatGPT 웹·모바일 앱의 설정 메뉴가 아닙니다. 시험 프로젝트에서 정상·실패 경로를 따로 확인하고 실제 키는 승인된 환경 변수나 비밀 저장소에서 불러오세요.
확인한 공식 자료
OpenAI Python API library — 연결·HTTP 오류 계열과 상태 코드·요청 ID 속성을 확인했습니다.
Error codes — 인증·권한·요청·결제 문제에 따른 대응 차이를 확인했습니다.
Production best practices — 시험·운영 프로젝트 분리와 키 보관 권고를 확인했습니다.
Python Errors and Exceptions — 처음 일치하는 예외 처리, else와 raise의 역할을 확인했습니다.
OpenAI 공식 SDK 예외 구현 — 시간 초과·연결 오류의 상속 관계를 확인했습니다.
