Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 OSError 예외를 잡는 방법 완벽 가이드

Python의 OSError 예외란 무엇인가?

OSError는 Python의 os 모듈에서 발생하는 오류 클래스로, 운영체제(OS) 관련 함수 호출이 실패했을 때 발생합니다. 예를 들어 존재하지 않는 파일을 열거나, 잘못된 파일 디스크립터에 접근하거나, 권한이 없는 작업을 수행하려 할 때 이 예외가 발생할 수 있습니다.

OSError는 IOError, FileNotFoundError, PermissionError 등 다양한 하위 예외 클래스들의 부모 클래스이기도 합니다.

OSError 예외 처리 예제 코드

아래 코드는 try-except 블록을 사용하여 예외를 잡고, 어떤 종류의 예외가 발생했는지 확인하는 방법을 보여줍니다.

# foobar.py
import os
import sys

try:
    for i in range(5):
        print(i, os.ttyname(i))
except Exception as e:
    print(e)
    print(type(e))

코드 설명

  • os.ttyname(i): 파일 디스크립터 i에 연결된 터미널 장치의 경로를 반환하는 함수입니다.
  • range(5): 0부터 4까지의 파일 디스크립터를 순서대로 확인합니다.
  • except Exception as e: 예외가 발생하면 해당 객체를 e에 담아 처리합니다.
  • type(e): 발생한 예외의 정확한 클래스 타입을 출력합니다.

실행 결과

리눅스 터미널에서 다음과 같이 스크립트를 실행합니다.

$ python foobar.py

실행 결과는 아래와 같습니다.

0 /dev/pts/0
1 /dev/pts/0
2 /dev/pts/0
3 [Errno 9] Bad file descriptor
<class 'OSError'>

결과 분석

파일 디스크립터 0, 1, 2는 각각 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)에 해당하며, 터미널 /dev/pts/0에 정상적으로 연결되어 있으므로 경로가 출력됩니다.

반면 파일 디스크립터 3은 열려 있는 유효한 스트림이 아니므로 [Errno 9] Bad file descriptor 오류가 발생하고, 프로그램은 이를 OSError 타입의 예외로 잡아 처리하게 됩니다.

정리

운영체제 의존적인 함수를 사용할 때는 반드시 try-except 블록으로 OSError를 처리하는 것이 좋습니다. 이렇게 하면 예상치 못한 시스템 오류로 인해 프로그램이 비정상 종료되는 것을 방지하고, 오류 메시지와 예외 타입을 통해 문제의 원인을 명확히 파악할 수 있습니다.