IOError 예외란?
IOError(입출력 오류)는 입력/출력 작업이 실패했을 때 발생하는 예외입니다. 대표적인 예로, 존재하지 않는 파일을 open() 함수로 열려고 시도하는 경우가 있으며, print 문처럼 표준 출력 스트림과 관련된 작업에서도 발생할 수 있습니다. 그 외에도 운영체제와 관련된 오류가 발생했을 때 이 예외가 나타납니다.
참고로 파이썬 3부터는 IOError가 OSError의 별칭(alias)이 되어 두 이름을 동일하게 사용할 수 있습니다.
오류가 발생할 가능성이 있는 코드를 try 블록 안에 작성하면, 실행 중 입출력 예외가 발생했을 때 except 블록에서 이를 잡아 적절히 처리할 수 있습니다.
예제 코드
import sys
def whatever():
try:
f = open("foo.txt", 'r')
except IOError as e:
print(e)
print(sys.exc_info()[0])
whatever()
실행 결과
[Errno 2] No such file or directory: 'foo.txt' <class 'OSError'>
위 예제에서는 존재하지 않는 foo.txt 파일을 열려고 시도하기 때문에 IOError가 발생합니다. 이때 except 블록이 해당 예외를 잡아 오류 메시지와 예외 타입을 화면에 출력하며, 프로그램이 비정상적으로 종료되지 않도록 합니다.
참고로 구버전인 파이썬 2에서는 except IOError, e: 형태로 예외를 받았지만, 파이썬 3에서는 반드시 except IOError as e: 처럼 as 키워드를 사용해야 한다는 점에 유의하세요.