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

파이썬에서 예외(Exception)가 객체인 이유와 구조 쉽게 이해하기

예외도 객체입니다

네, 질문에 나온 코드에서 err는 하나의 예외 객체(exception object)입니다.

파이썬에서는 숫자, 문자열, 리스트, 함수에 이르기까지 모든 것이 객체입니다. 그리고 모든 객체는 속성(attribute)과 메서드(method)를 가지고 있습니다. 마찬가지로 예외도 리스트나 튜플, 함수처럼 하나의 객체이며, 다른 객체들과 동일하게 고유한 속성들을 가집니다. 즉, 예외의 속성도 언제든지 설정하고 읽어올 수 있습니다.

예외 객체의 기본 클래스와 속성

거의 모든 예외는 Exception이라는 기본 클래스(base class)를 상속받습니다. 만약 e가 예외 객체라면, e.argse.message 같은 속성을 통해 예외 관련 정보에 접근할 수 있습니다.

  • args: 예외 생성 시 전달된 인자들이 담긴 튜플
  • message: 예외에 대한 메시지 문자열

현행 파이썬에서 예외의 3가지 구성 요소

현재 파이썬 구현에서 예외는 다음 세 가지 부분으로 구성됩니다.

  1. 타입(type) – 발생한 예외의 클래스
  2. 값(value) – 예외 인스턴스와 함께 전달된 값
  3. 트레이스백(traceback) – 예외가 발생한 호출 스택 정보

sys 모듈은 현재 처리 중인 예외 객체를 exc_type, exc_value, exc_traceback이라는 세 변수로 표현합니다.

또한 sys.exc_info() 함수는 이 세 가지 속성을 하나의 튜플로 묶어 반환하며, raise 문 역시 이 세 요소를 받는 세 인자 형태를 지원합니다.

실행 결과 확인

질문의 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.

(<type 'exceptions.ValueError'>, ValueError('could not convert
string to int: Godzilla!',), <traceback object at 0x0000000002E33748>)

출력 결과를 살펴보면 첫 번째 요소는 예외의 타입(ValueError), 두 번째 요소는 예외 값(메시지를 포함한 객체), 세 번째 요소는 트레이스백 객체임을 알 수 있습니다. 이처럼 예외도 일반 객체처럼 속성을 조회하고 다룰 수 있다는 점이 바로 "파이썬에서 예외는 객체다"라는 사실을 보여주는 좋은 예입니다.