EnvironmentError는 운영체제, 파일 시스템 등 파이썬 외부 환경에서 발생하는 오류들을 위한 기본 클래스(Base Class)입니다.
EnvironmentError란?
EnvironmentError는 표준 예외 계층 구조에 속하며, IOError와 OSError 예외의 상위(부모) 클래스 역할을 합니다.
흥미로운 점은 EnvironmentError 자체는 실제로 발생(raised)하지 않는다는 것입니다. 대신 파일을 열지 못하거나 디렉터리를 찾지 못하는 등의 상황에서 그 하위 클래스인 IOError나 OSError가 대신 발생합니다.
따라서 IOError나 OSError가 발생하는 모든 상황은 곧 EnvironmentError의 한 사례라고 볼 수 있습니다. 즉, EnvironmentError를 잡으면(catch) IOError와 OSError까지 함께 처리할 수 있습니다.
예제 코드
다음은 존재하지 않는 파일을 열려고 시도할 때 발생하는 예외를 잡아 출력하는 예제입니다.
import sys
try:
f = open("JohnDoe.txt", 'r')
except Exception as e:
print e
print sys.exc_type
실행 결과
[Errno 2] No such file or directory: 'JohnDoe.txt'
<type 'exceptions.IOError'>
참고: 파이썬 3에서의 변경 사항
위 예제는 파이썬 2 문법을 사용합니다. 파이썬 3에서는 StandardError 클래스가 제거되었고, EnvironmentError는 더 이상 별도의 클래스가 아닌 OSError의 별칭(alias)으로 통합되었습니다. 또한 sys.exc_type 대신 type(e)를 사용해야 합니다.
파이썬 3에서 동일한 코드를 작성하면 다음과 같습니다.
try:
f = open("JohnDoe.txt", 'r')
except OSError as e:
print(e)
print(type(e))
실행 결과는 다음과 같습니다.
[Errno 2] No such file or directory: 'JohnDoe.txt'
<class 'FileNotFoundError'>
이처럼 EnvironmentError 계열의 예외를 처리할 때는 except OSError: 또는 더 세분화된 except FileNotFoundError:처럼 구체적인 예외를 명시하는 것이 좋은 코딩 습관입니다.