Python

내장 예외(Built-in Exceptions)

파이썬에서 모든 예외는 BaseException 을 상속하는 클래스의 인스턴스여야 합니다. 특정 클래스를 명시한 except 절이 포함된 try 문에서, 해당 절은 그 클래스에서 파생된 모든 예외 클래스를 처리합니다(단, 그 클래스가 상속받은 상위 예외 클래스는 포함하지 않습니다). 서브클래싱을 통해 관련되지 않은 두 예외 클래스는 이름이 같더라도 결코 동일하게 취급되지 않습니다.

이 장에 나열된 내장 예외는 인터프리터나 내장 함수에 의해 생성될 수 있습니다. 언급된 경우를 제외하고, 이들은 오류의 상세 원인을 나타내는 “연관된 값(associated value)”을 가집니다. 이 값은 문자열이거나 여러 정보 항목(예: 에러 코드와 이를 설명하는 문자열)의 튜플일 수 있습니다. 연관된 값은 보통 예외 클래스의 생성자에 인자로 전달됩니다.

사용자 코드는 내장 예외를 발생시킬 수 있습니다. 이는 예외 핸들러를 테스트하거나 인터프리터가 동일한 예외를 발생시키는 상황과 “마찬가지로” 오류 상황을 보고하는 데 사용될 수 있습니다. 하지만 사용자 코드가 부적절한 오류를 발생시키는 것을 방지할 수 있는 장치는 없으므로 주의하십시오.

내장 예외 클래스는 새로운 예외를 정의하기 위해 서브클래스화할 수 있습니다. 프로그래머는 BaseException 이 아닌 Exception 클래스나 그 서브클래스 중 하나에서 새로운 예외를 파생시킬 것을 권장합니다. 예외 정의에 대한 자세한 정보는 파이썬 튜토리얼의 사용자 정의 예외 에서 확인할 수 있습니다.

예외 컨텍스트

예외 객체의 세 가지 속성은 예외가 발생한 컨텍스트에 대한 정보를 제공합니다.

BaseException.__context__
BaseException.__cause__
BaseException.__suppress_context__

다른 예외가 처리되는 중에 새로운 예외를 발생시킬 때, 새 예외의 __context__ 속성은 자동으로 처리 중인 예형 예외로 설정됩니다. 예외는 except 또는 finally 절이나 with 문이 사용될 때 처리될 수 있습니다.

이 암시적 예외 컨텍스트는 raise`와 함께 :keyword:!from`을 사용하여 명시적인 원인으로 보완할 수 있습니다.

raise new_exc from original_exc

from 뒤의 표현식은 예외이거나 None 이어야 합니다. 이는 발생한 예외의 __cause__ 로 설정됩니다. __cause__ 를 설정하면 __suppress_context__ 속성도 암시적으로 True 로 설정되므로, raise new_exc from None 을 사용하면 표시 목적상(예: KeyErrorAttributeError 로 변환) 기존 예외를 새 예외로 교체하면서도 디버깅 시 내부 조사를 위해 기존 예외를 __context__ 에 남겨둘 수 있습니다.

기본 트레이스백 표시 코드는 예외 자체의 트레이스백 외에도 이러한 체인된 예환들을 보여줍니다. __cause__ 에 명시적으로 체인된 예외는 존재하는 경우 항상 표시됩니다. __context__ 에 암시적으로 체인된 예외는 __cause__None 이고 __suppress_context__ 가 False인 경우에만 표시됩니다.

어느 경우든 예외 자체는 항상 체인된 예환 뒤에 표시되어, 트레이스백의 마지막 줄이 항상 마지막으로 발생한 예외를 보여줍니다.

내장 예외 상속

사용자 코드는 예외 유형을 상속받는 서브클래스를 생성할 수 있습니다. 상위 클래스들이 args 속성을 처리하는 방식 간의 충돌을 방지하고 메모리 레이아웃 호환성 문제를 피하기 위해 한 번에 하나의 예외 유형만 상속받는 것을 권장합니다.

대부분의 내장 예환은 효율성을 위해 C로 구현되어 있습니다(참고: Objects/exceptions.c). 일부는 사용자 정의 메모리 레이아웃을 가지고 있어 여러 예환 유형을 상속받는 서브클래스를 만드는 것이 불가능합니다. 타입의 메모리 레이아웃은 구현의 세부 사항이며 파이썬 버전마다 변경될 수 있어 향후 새로운 충돌이 발생할 수 있습니다. 따라서 여러 예환 유형을 상속받는 것을 지양할 것을 권장합니다.

기본 클래스

다음 예환들은 주로 다른 예환들의 베이스 클래스로 사용됩니다.

exception BaseException

모든 내장 예환의 베이스 클래스입니다. 사용자 정의 클래스가 직접 상속하도록 설계되지 않았습니다(이 경우 Exception 을 사용하십시오). 이 클래스의 인스턴스에 대해 str() 을 호출하면 인자에 대한 표현이 반환되며, 인자가 없는 경우 빈 문자열이 반환됩니다.

args

예외 생성자에 전달된 인자들의 튜플입니다. 일부 내장 예환(예: OSError)은 특정 수의 인자를 기대하고 이 튜플의 요소에 특별한 의미를 부여하는 반면, 다른 것들은 보통 오류 메시지를 제공하는 단일 문자열과 함께 호출됩니다.

with_traceback(tb)

이 메서드는 tb 를 예외의 새로운 트레이스백으로 설정하고 예외 객체를 반환합니다. 이 기능은 PEP 3134 의 예외 체인 기능이 도입되기 전에 더 흔히 사용되었습니다. 다음 예제는 트레이스백을 유지하면서 SomeException 인스턴스를 OtherException 인스턴스로 변환하는 방법을 보여줍니다. 일단 발생하면, 현재 프레임이 OtherException 의 트레이스백에 추가됩니다. 이는 원본 SomeException 이 호출자에게 전파되었을 때 발생했을 트레이스백과 동일한 상황입니다.

try:
    ...
except SomeException:
    tb = sys.exception().__traceback__
    raise OtherException(...).with_traceback(tb)
__traceback__

이 예환과 연결된 트레이스백 객체 를 보유하는 쓰기 가능한 필드입니다. 참고: raise 문.

add_note(note)

예외 문자열 뒤에 표준 트레이스백에 나타나는 예환의 노트에 note 문자열을 추가합니다. note 가 문자열이 아니면 TypeError 가 발생합니다.

Added in version 3.11.

__notes__

add_note() 로 추가된 이 예환의 노트 목록입니다. 이 어트리뷰트는 add_note() 가 호출될 때 생성됩니다.

Added in version 3.11.

exception Exception

모든 내장 시스템 종료 예외는 이 클래스에서 파생됩니다. 모든 사용자 정의 예환도 이 클래스에서 파생되어야 합니다.

exception ArithmeticError

다양한 산술 오류에 대해 발생하는 내장 예환들의 베이스 클래스입니다: OverflowError, ZeroDivisionError, FloatingPointError.

exception BufferError

버퍼 관련 작업을 수행할 수 없을 때 발생합니다.

exception LookupError

매핑 또는 시퀀스에서 사용되는 키나 인덱스가 유효하지 않을 때 발생하는 예환들의 베이스 클래스입니다: IndexError, KeyError. 이는 codecs.lookup() 에 의해 직접 발생할 수 있습니다.

구체적인 예환(Concrete exceptions)

다음은 통상적으로 발생하는 예환들입니다.

exception AssertionError

인정할 수 없는 assert 문이 실패할 때 발생합니다.

exception AttributeError

어트리뷰트 참조(참고: 어트리뷰트 참조)나 할당이 실패할 때 발생합니다. (객체가 어트리뷰트 참조나 할당을 전혀 지원하지 않는 경우, TypeError 가 발생합니다.)

선택적 nameobj 키워드 전용 인자는 해당 어트리뷰트를 설정합니다:

name

액세스를 시도한 어트리뷰트의 이름입니다.

obj

해당 이름의 어트리뷰트에 대해 접근한 객체입니다.

가능한 경우, nameobj 는 자동으로 설정됩니다.

버전 3.10에서 변경: 어트리뷰트 nameobj 를 추가했습니다.

exception EOFError

input() 함수가 데이터를 읽지 않은 채 파일 끝(EOF)에 도달했을 때 발생합니다. (참고: io.TextIOBase.read()io.IOBase.readline() 메서드는 EOF에 도달하면 빈 문자열을 반환합니다.)

exception FloatingPointError

현재 사용되지 않습니다.

exception GeneratorExit

제너레이터 또는 코루틴 이 닫힐 때 발생합니다. 참조: generator.close()coroutine.close(). 이는 기술적으로 오류가 아니므로 Exception 대신 BaseException 을 직접 상속합니다.

exception ImportError

import 문이 모듈을 로드하는 데 문제가 생길 때 발생합니다. 또한 from ... import 에서 “from 리스트”에 포함된 이름이 존재하지 않을 때 발생합니다.

선택적 namepath 키워드 전용 인자는 해당 어트리뷰트를 설정합니다:

name

임포트를 시도한 모듈의 이름입니다.

path

예황을 유발한 파일의 경로입니다.

버전 3.3에서 변경: 어트리뷰트 namepath 를 추가했습니다.

exception ModuleNotFoundError

import 시 모듈을 찾을 수 없을 때 발생하는 ImportError 의 서브 클래스입니다. sys.modules 에서 None 이 발견될 때도 발생합니다.

Added in version 3.6.

exception ImportCycleError

지연 로드(lazy import)가 (직접 또는 간접적으로) 자기 자신을 임포트하려다 실패할 때 발생하는 ImportError 의 서브 클래스입니다.

Added in version 3.15.

exception IndexError

시퀀스 인덱스가 범위를 벗어날 때 발생합니다. (슬라이스 인덱스는 허용된 범위로 자동 절단됩니다. 인덱스가 정수가 아닌 경우 TypeError 가 발생합니다.)

exception KeyError

매핑(딕셔너리) 키를 기존 키 세트에서 찾을 수 없을 때 발생합니다.

exception KeyboardInterrupt

사용자가 인터럽트 키(일반적으로 Control-C 또는 Delete)를 눌렀을 때 발생합니다. 실행 중에 인터럽트 확인이 정기적으로 수행됩니다. 이 예외는 BaseException 을 상속받으므로, Exception 을 잡는 코드에 의해 실수로 잡히는 것을 방지하여 인터프리터가 종료되지 않도록 합니다.

참고

KeyboardInterrupt 을 처리할 때는 특별한 주의가 필요합니다. 예측할 수 없는 시점에 발생할 수 있기 때문에, 어떤 상황에서는 실행 중인 프로그램이 일관성 없는 상태로 남을 수 있습니다. 일반적으로는 KeyboardInterrupt 가 프로그램이 가능한 한 빨리 종료되도록 허용하거나 아예 발생하지 않도록 하는 것이 가장 좋습니다. (신호 처리기와 예외에 대한 참고 사항 참조.)

exception MemoryError

작업 중에 메모리가 부족하지만 상황을 구제할 수 있는 경우(일부 객체를 삭제함으로써)에 발생합니다. 연관된 값은 어떤 종류의 (내부) 작업에서 메모리가 부족했는지를 나타내는 문자열입니다. 기본 메모리 관리 구조(C의 malloc() 함수)로 인해 인터프리터가 항상 이 상황에서 완전히 복구할 수 있는 것은 아니지만, 제어되지 않는 프로그램이 원인인 경우 스택 추적을 출력할 수 있도록 예외를 발생시킵니다.

exception NameError

로컬 또는 전역 이름을 찾을 수 없을 때 발생합니다. 이는 한정되지 않은(unqualified) 이름에만 적용됩니다. 연관된 값은 찾을 수 없는 이름을 포함하는 에러 메시지입니다.

선택적인 name 키워드 전용 인수는 다음 어트리뷰트를 설정합니다:

name

접근을 시도했던 변수의 이름.

버전 3.10에서 변경: 어트리뷰트 name 을 추가했습니다.

exception NotImplementedError

이 예외는 RuntimeError 에서 파생되었습니다. 사용자가 정의한 기본 클래스에서 추상 메서드가 하위 클래스에서 재정의를 요구하거나, 클래스 개발 중에 실제 구현이 아직 추가되어야 함을 나타낼 때 이 예외를 발생시켜야 합니다.

참고

연산자나 메서드가 아예 지원되지 않음을 나타내기 위해 이 예외를 사용해서는 안 됩니다. 그러한 경우 연산자/메서드를 정의하지 않은 상태로 두거나, 하위 클래스인 경우 None 으로 설정하십시오.

조심

NotImplementedErrorNotImplemented 는 서로 대체할 수 없습니다. 이 예외는 위에 설명된 대로만 사용되어야 하며, 내장 상수의 올바른 사용법에 대한 자세한 내용은 NotImplemented 를 참조하십시오.

exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])

시스템 함수가 “file not found” 또는 “disk full”과 같은 I/O 실패를 포함하여 시스템 관련 에러를 반환할 때 이 예외가 발생합니다(부적절한 인자 유형이나 기타 부수적인 에러의 경우에는 발생하지 않습니다).

생성자의 두 번째 형태는 아래에 기술된 해당 어트리뷰트들을 설정합니다. 명시되지 않은 어트리뷰트는 기본적으로 None 이 됩니다. 하위 호환성을 위해 세 개의 인자가 전달되는 경우, args 어트리뷰트에는 처음 두 생성자 인자만 포함된 2-튜플이 들어 있습니다.

생성자는 아래 OS exceptions 섹션에서 설명된 바와 같이 실제로는 OSError 의 하위 클래스를 반환하는 경우가 많습니다. 구체적인 하위 클래스는 최종 errno 값에 따라 달라집니다. 이 동작은 OSError 를 직접 생성하거나 별칭을 통해 생성할 때만 발생하며, 하위 클래스 상속 시에는 상속되지 않습니다.

errno

C 변수 errno 의 숫자 에러 코드입니다.

winerror

Windows 환경에서 이는 네이티브 Windows 에러 코드를 제공합니다. errno 어트리뷰트는 그 네이티브 에러 코드를 POSIX 관점에서 근사하게 변환한 값입니다.

Windows 환경에서 winerror 생성자 인자가 정수이면, errno 어트리뷰트가 Windows 에러 코드로부터 결정되고 errno 인자는 무시됩니다. 다른 플랫폼에서는 winerror 인자가 무시되며, winerror 어트리뷰트가 존재하지 않습니다.

strerror

운영체제에서 제공하는 해당 에러 메시지입니다. POSIX 환경에서는 C 함수 perror`에 의해, Windows 환경에서는 :c:func:()!FormatMessage`에 의해 포맷됩니다.

filename
filename2

파일 시스템 경로를 포함하는 예외(예: open() 또는 os.unlink())의 경우, filename 은 함수에 전달된 파일 이름입니다. 두 개의 파일 시스템 경로를 포함하는 함수(예: os.rename())의 경우, filename2 는 함수에 전달된 두 번째 파일 이름에 해당합니다.

버전 3.3에서 변경: EnvironmentError, IOError, WindowsError, socket.error, select.errormmap.errorOSError 로 통합되었으며, 생성자는 하위 클래스를 반환할 수 있습니다.

버전 3.4에서 변경: filename 어트리뷰트는 이제 파일 시스템 인코딩 및 에러 처리기 에서 인코딩되거나 디코딩된 이름이 아니라 함수에 전달된 원래 파일 이름입니다. 또한 filename2 생성자 인자 및 어트리뷰트가 추가되었습니다.

exception OverflowError

산술 연산 결과가 표현하기에 너무 클 때 발생합니다. 정수형의 경우 표현이 불가능할 경우 MemoryError 를 발생시키기 때문에 발생하지 않습니다. 그러나 역사적인 이유로 인해 필수 범위를 약간 벗어난 정수에 대해서도 때때로 OverflowError가 발생합니다. C에서 부동 소수점 예외 처리가 표준화되어 있지 않기 때문에 대부분의 부동 소수점 연산은 확인되지 않습니다.

exception PythonFinalizationError

이 예환은 RuntimeError 에서 파생되었습니다. Python 마무리 라고도 알려진 인터프리터 종료 중에 작업이 차단될 때 발생합니다.

Python 마무리 과정에서 PythonFinalizationError 와 함께 차단될 수 있는 작업의 예는 다음과 같습니다.

  • 새로운 Python 스레드 생성.

  • 실행 중인 데몬 스레드를 Join.

  • os.fork(),

  • 그렇지 않았으면 교착 상태(deadlock)에 빠졌을 것이라고 알려진 상황에서 threading.Lock 과 같은 록을 획득하는 경우.

sys.is_finalizing() 함수도 참조하십시오.

Added in version 3.13: 이전에는 일반적인 RuntimeError 가 발생했습니다.

버전 3.14에서 변경: threading.Thread.join() 이 이제 이 예외를 발생시킬 수 있습니다.

버전 3.15에서 변경: threading.Lock() 또는 threading.RLock() 을 획득할 때 이 예외가 발생할 수 있습니다.

exception RecursionError

이 예외는 RuntimeError 에서 파생되었습니다. 인터프리터가 최대 재귀 깊이(sys.getrecursionlimit() 참조)를 초과했음을 감지할 때 발생합니다.

Added in version 3.5: 이전에는 일반적인 RuntimeError 가 발생했습니다.

exception ReferenceError

weakref.proxy() 함수로 생성된 약한 참조 프록시가 가비지 컬렉션된 후 참조 대상의 어트리뷰트에 접근하려고 할 때 이 예외가 발생합니다. 약한 참조에 대한 자세한 내용은 weakref 모듈을 참조하십시오.

exception RuntimeError

다른 범주 중 어디에도 속하지 않는 오류가 감지될 때 발생합니다. 연관된 값은 정확히 무엇이 잘못되었는지를 나타내는 문자열입니다.

exception StopIteration

내장 함수 next()이터레이터__next__() 메서드에서 이터레이터가 생성하는 항목이 더 이상 없을 때 이를 알리기 위해 발생합니다.

value

예외 객체는 예외를 구성할 때 인자로 제공되며 기본값이 None`인 단일 어트리뷰트 :attr:!value`를 가집니다.

제너레이터 또는 코루틴 함수가 반환될 때, 새로운 StopIteration 인스턴스가 발생하며, 함수에서 반환된 값이 예외 생성자의 value 매개변수로 사용됩니다.

제너레이터 코드가 직접 또는 간접적으로 StopIteration 을 발생시키면, RuntimeError 로 변환됩니다(이때 StopIteration 은 새 예외의 원인으로 유지됩니다).

버전 3.3에서 변경: value 어트리뷰트와 제너레이터 함수가 이를 사용하여 값을 반환하는 기능이 추가되었습니다.

버전 3.5에서 변경: from __future__ import generator_stop 을 통해 RuntimeError 변환이 도입되었습니다. 자세한 내용은 PEP 479 를 참조하십시오.

버전 3.7에서 변경: 기본적으로 모든 코드에 대해 PEP 479 을 활성화합니다. 제너레이터에서 발생한 StopIteration 오류는 RuntimeError 로 변환됩니다.

exception StopAsyncIteration

반복을 중단하려면 비동기 이터레이터 객체의 __anext__() 메서드에서 발생해야 합니다.

Added in version 3.5.

exception SyntaxError(message, details)

파서가 구문 오류를 발견했을 때 발생합니다. 이는 import 문이나 내장 함수인 compile(), exec(), eval() 호출 시, 또는 초기 스크립트나 표준 입력(대화형 포함)을 읽을 때 발생할 수 있습니다.

예외 인스턴스의 str() 은 에러 메시지만 반환합니다. Details는 멤버들이 개별 어트리뷰트로도 사용 가능한 튜플입니다.

filename

구문 오류가 발생한 파일의 이름입니다.

lineno

오류가 발생한 파일의 줄 번호입니다. 1-인덱싱이며, 파일의 첫 번째 줄은 lineno 가 1입니다.

offset

오류가 발생한 줄의 열입니다. 1-인덱싱이며, 줄의 첫 번째 문자는 offset 이 1입니다.

text

오류와 관련된 소스 코드 텍스트입니다.

end_lineno

오류가 발생한 위치가 끝나는 파일의 줄 번호입니다. 1-인덱싱이며, 파일의 첫 번째 줄은 lineno 가 1입니다.

end_offset

오류가 끝나는 지점의 줄 내 열입니다. 1-인덱싱이며, 줄의 첫 번째 문자는 offset 이 1입니다.

f-string 필드에서 발생하는 오류의 경우, 메시지 앞에 “f-string: “이 붙고 오프셋은 치환 표현식으로 구성된 텍스트의 오프셋입니다. 예를 들어, f’Bad {a b} field’를 컴파일하면 다음과 같은 args 어트리뷰트가 생성됩니다: (‘f-string: …’, (‘’, 1, 2, ‘(a b)n’, 1, 5)).

버전 3.10에서 변경: end_linenoend_offset 어트리뷰트가 추가되었습니다.

exception IndentationError

잘못된 들여쓰기와 관련된 구문 오류에 대한 기본 클래스입니다. 이는 SyntaxError 의 서브 클래스입니다.

exception TabError

들여쓰기에 탭과 공백이 일관성 없게 사용될 때 발생합니다. 이는 IndentationError 의 서브 클래스입니다.

exception SystemError

인터프리터가 내부 오류를 발견했지만, 상황이 모든 희망을 버리고 중단해야 할 정도로 심각하지 않을 때 발생합니다. 연관된 값은 무엇이 잘못되었는지를 나타내는 문자열(저수준의 의미)입니다. CPython 에서 이는 예외를 설정하지 않고 NULL 값을 반환하는 등 파이썬 C API를 잘못 사용할 때 발생할 수 있습니다.

이 예외가 본인이나 사용 중인 패키지의 실수가 아니라고 확신한다면, 파이썬 인터프리터 제작자나 유지관리자에게 보고해야 합니다. 보고 시 파이썬 인터프리터 버전(sys.version; 대화형 세션 시작 시 출력됨), 정확한 에러 메시지(예외의 연관 값), 그리고 가능하다면 에러를 유발한 프로그램의 소스를 포함하십시오.

exception SystemExit

이 예외는 sys.exit() 함수에 의해 발생합니다. Exception 대신 BaseException 을 상속받으므로, Exception 을 처리하는 코드에 의해 실수로 잡히지 않습니다. 이를 통해 예외가 제대로 상위로 전파되어 인터프리터가 종료되도록 합니다. 처리되지 않을 경우 파이썬 인터프리터가 종료되며 스택 트레이스백이 출력되지 않습니다. 생성자는 sys.exit() 에 전달되는 것과 동일한 선택적 인자를 받습니다. 값이 정수이면 시스템 종료 상태를 지정하며(C의 exit() 함수로 전달됨), None 이면 종료 상태가 0이 되고, 다른 유형(문자열 등)이면 객체의 값이 출력되고 종료 상태가 1이 됩니다.

sys.exit() 호출은 정리 핸들러(try 문에 포함된 finally 절)를 실행할 수 있도록 예외로 변환되며, 디버거가 제어권을 잃을 위험 없이 스크립트를 실행할 수 있도록 합니다. 즉시 종료가 반드시 필요한 경우(예를 들어, os.fork() 호출 후의 자식 프로세스에서)에는 os._exit() 함수를 사용할 수 있습니다.

code

생성자에 전달되는 종료 상태 또는 에러 메시지입니다. (기본값은 None 입니다.)

exception TypeError

연산이나 함수가 부적절한 유형의 객체에 적용될 때 발생합니다. 연관된 값은 유형 불일치에 대한 세부 정보를 제공하는 문자열입니다.

이 예외는 사용자 코드가 특정 객체에 대한 연산이 지원되지 않으며, 지원할 계획도 없음을 나타내기 위해 발생시킬 수 있습니다. 객체가 해당 연산을 지원하기로 되어 있으나 아직 구현되지 않은 경우에는 NotImplementedError 를 발생시키는 것이 적절합니다.

잘못된 유형의 인자를 전달하는 경우(예: int 를 기대할 때 list 를 전달하는 경우)는 TypeError 를 발생시켜야 하며, 잘못된 값의 인자를 전달하는 경우(예: 허용 범위를 벗어난 숫자)는 ValueError 를 발생시켜야 합니다.

exception UnboundLocalError

함수나 메서드 내에서 지역 변수를 참조하지만 해당 변수에 아무런 값도 바인딩되지 않았을 때 발생합니다. 이는 NameError 의 서브 클래스입니다.

exception UnicodeError

유니코드 관련 인코딩 또는 디코딩 에러가 발생할 때 발생합니다. 이는 ValueError 의 서브 클래스입니다.

UnicodeError 는 인코딩 또는 디코딩 에러를 설명하는 어트리뷰스를 가집니다. 예를 들어, err.object[err.start:err.end] 는 코덱이 실패한 특정 유효하지 않은 입력을 반환합니다.

encoding

에러를 발생시킨 인코딩의 이름입니다.

reason

특정 코덱 에러를 설명하는 문자열입니다.

object

코덱이 인코딩 또는 디코딩을 시도하던 객체입니다.

start

object 에서 유효하지 않은 데이터의 첫 번째 인덱스입니다.

이 값은 절대 오프셋으로 해석되므로 음수가 아니어야 하지만, 이 제약 조건은 런타임에 강제되지 않습니다.

end

object 에서 마지막으로 유효하지 않은 데이터의 다음 인덱스입니다.

이 값은 절대 오프셋으로 해석되므로 음수가 아니어야 하지만, 이 제약 조건은 런타임에 강제되지 않습니다.

exception UnicodeEncodeError

인코딩 중 유니코드 관련 에러가 발생할 때 발생합니다. 이는 UnicodeError 의 서브 클래스입니다.

exception UnicodeDecodeError

디코딩 중 유니코드 관련 에러가 발생할 때 발생합니다. 이는 UnicodeError 의 서브 클래스입니다.

exception UnicodeTranslateError

번역 중 유니코드 관련 에러가 발생할 때 발생합니다. 이는 UnicodeError 의 서브 클래스입니다.

exception ValueError

연산이나 함수가 적절한 타입을 갖지만 부적합한 값을 가진 인자를 받을 때, 그리고 그 상황이 IndexError 와 같은 더 정확한 예외로 설명되지 않을 때 발생합니다.

exception ZeroDivisionError

나눗셈이나 나머지 연산의 두 번째 인자가 0일 때 발생합니다. 연관된 값은 피연산자의 유형과 연산을 나타내는 문자열입니다.

다음 예외들은 이전 버전과의 호환성을 위해 유지되며, 파이썬 3.3부터는 OSError 의 별칭입니다.

exception EnvironmentError
exception IOError
exception WindowsError

Windows에서만 사용할 수 있습니다.

OS 예외

The following exceptions are subclasses of OSError, they get raised depending on the system error code.

exception BlockingIOError

비차단(non-blocking) 동작으로 설정된 객체(예: 소켓)에서 연산이 차단될 때 발생합니다. errnoEAGAIN, EALREADY, EWOULDBLOCK, EINPROGRESS 에 해당합니다.

OSError 외에도 BlockingIOError 는 다음과 같은 한 가지 어트리뷰스를 더 가질 수 있습니다:

characters_written

차단되기 전 스트림에 쓰인 바이트 수를 포함하는 정수입니다. 이 어트리뷰트는 io 모듈의 버퍼형 I/O 클래스를 사용할 때 사용할 수 있습니다.

exception ChildProcessError

자식 프로세스에 대한 연산이 실패할 때 발생합니다. errno ECHILD 에 해당합니다.

exception ConnectionError

연결 관련 문제에 대한 기본 클래스입니다.

서브 클래스는 BrokenPipeError, ConnectionAbortedError, ConnectionRefusedError, ConnectionResetError 입니다.

exception BrokenPipeError

ConnectionError 의 서브 클래스로서, 반대편이 닫힌 파이프에 쓰려고 하거나 쓰기가 종료된 소켓에 쓰려고 할 때 발생합니다. errno EPIPEESHUTDOWN 에 해당합니다.

exception ConnectionAbortedError

ConnectionError 의 서브 클래스로서, 연결 시도가 상대방에 의해 중단될 때 발생합니다. errno ECONNABORTED 에 해당합니다.

exception ConnectionRefusedError

ConnectionError 의 서브 클래스로서, 연결 시도가 상대방에 의해 거부될 때 발생합니다. errno ECONNREFUSED 에 해당합니다.

exception ConnectionResetError

ConnectionError 의 서브 클래스로서, 연결이 상대방에 의해 리셋될 때 발생합니다. errno ECONNRESET 에 해당합니다.

exception FileExistsError

이미 존재하는 파일이나 디렉터리를 생성하려고 할 때 발생합니다. errno EEXIST 에 해당합니다.

exception FileNotFoundError

파일이나 디렉터리를 요청했으나 존재하지 않을 때 발생합니다. errno ENOENT 에 해당합니다.

exception InterruptedError

시스템 호출이 들어오는 시그널에 의해 중단될 때 발생합니다. errno EINTR 에 해당합니다.

버전 3.5에서 변경: 파이썬은 이제 시스템 호출이 시그널에 의해 중단될 때, 시그널 처리기가 예외를 발생시키지 않는 경우(관련 근거는 PEP 475 참조) InterruptedError 를 발생시키는 대신 시스템 호출을 재시도합니다.

exception IsADirectoryError

Raised when a file operation (such as os.remove()) is requested on a directory. Corresponds to errno EISDIR.

exception NotADirectoryError

디렉터리가 아닌 대상에 대해 디렉터리 작업(예: os.listdir())이 요청될 때 발생합니다. 대부분의 POSIX 플랫폼에서는 디렉터리가 아닌 파일을 디렉터리인 것처럼 열거나 탐색하려고 할 때도 발생할 수 있습니다. errno ENOTDIR 에 해당합니다.

exception PermissionError

적절한 접근 권한(예: 파일 시스템 권한) 없이 연산을 실행하려고 할 때 발생합니다. errno EACCES, EPERM, 및 ENOTCAPABLE 에 해당합니다.

버전 3.11.1에서 변경: WASI의 ENOTCAPABLE 이 이제 PermissionError 로 매핑됩니다.

exception ProcessLookupError

해당 프로세스가 존재하지 않을 때 발생합니다. errno ESRCH 에 해당합니다.

exception TimeoutError

시스템 수준에서 시스템 함수가 시간 초과(timeout)되었을 때 발생합니다. errno ETIMEDOUT 에 해당합니다.

Added in version 3.3: 위의 모든 OSError 서브 클래스가 추가되었습니다.

더 보기

PEP 3151 - OS 및 IO 예외 계층 구조 개편

경고

다음 예외들이 경고 범주로 사용됩니다. 자세한 내용은 경고 범주 문서를 참조하십시오.

exception Warning

경고 범주의 베이스 클래스.

exception UserWarning

사용자 코드에 의해 생성된 경고의 베이스 클래스.

exception DeprecationWarning

다른 파이썬 개발자를 대상으로 하는 폐지된 기능에 대한 경고의 베이스 클래스.

__main__ 모듈을 제외한 기본 경고 필터에서 무시됩니다 (PEP 565). Python Development Mode 를 활성화하면 이 경고가 표시됩니다.

폐지 정책은 PEP 387 에 설명되어 있습니다.

exception PendingDeprecationWarning

현재는 폐지되지 않았으나 향후 폐지될 것으로 예상되는 기능에 대한 경고의 베이스 클래스.

이 클래스는 거의 사용되지 않습니다. 곧 폐지될 가능성이 있는 것에 대해 경고를 내보내는 것은 일반적이지 않으며, 이미 활성화된 폐지의 경우 DeprecationWarning 을 사용하는 것이 권장됩니다.

기본 경고 필터에 의해 무시됩니다. Python Development Mode 를 활성화하면 이 경고가 표시됩니다.

폐지 정책은 PEP 387 에 설명되어 있습니다.

exception SyntaxWarning

의심스러운 구문에 대한 경고의 베이스 클래스.

이 경고는 일반적으로 파이썬 소스 코드를 컴파일할 때 발생하며, 이미 컴파일된 코드를 실행할 때는 보통 보고되지 않습니다.

exception RuntimeWarning

의심스러운 런타임 동작에 대한 경고의 베이스 클래스.

exception FutureWarning

파이썬으로 작성된 응용 프로그램의 최종 사용자를 대상으로 하는 폐지된 기능에 대한 경고의 베이스 클래스.

exception ImportWarning

모듈 임포트 시 발생할 수 있는 오류에 대한 경고의 베이스 클래스.

기본 경고 필터에 의해 무시됩니다. Python Development Mode 를 활성화하면 이 경고가 표시됩니다.

exception UnicodeWarning

유니코드와 관련된 경고의 베이스 클래스.

exception EncodingWarning

인코딩과 관련된 경고의 베이스 클래스.

자세한 내용은 선택적 인코딩 경고(EncodingWarning) 을 참조하십시오.

Added in version 3.10.

exception BytesWarning

bytesbytearray 와 관련된 경고의 베이스 클래스.

exception ResourceWarning

리소스 사용과 관련된 경고의 베이스 클래스.

기본 경고 필터에 의해 무시됩니다. Python Development Mode 를 활성화하면 이 경고가 표시됩니다.

Added in version 3.2.

예외 그룹

서로 관련 없는 여러 예외를 발생시켜야 할 때 다음 내용이 사용됩니다. 이들은 예외 계층 구조의 일부이므로 다른 모든 예시와 마찬가지로 except 를 사용하여 처리할 수 있습니다. 또한, 이들은 포함된 예외의 유형에 따라 하위 그룹을 매칭하는 except* 에 의해 인식됩니다.

exception ExceptionGroup(msg, excs)
exception BaseExceptionGroup(msg, excs)

이 두 예외 유형 모두 excs 시퀀스에 있는 예외를 래핑합니다. msg 매개변수는 문자열이어야 합니다. 두 클래스의 차이점은 BaseExceptionGroupBaseException 을 상속받아 모든 예외를 래핑할 수 있는 반면, ExceptionGroupException 을 상속받아 Exception 의 서브 클래스만 래핑할 수 있다는 점입니다. 이 설계는 except ExceptionExceptionGroup 은 잡지만 BaseExceptionGroup 은 잡지 못하게 하기 위함입니다.

The BaseExceptionGroup constructor returns an ExceptionGroup rather than a BaseExceptionGroup if all contained exceptions are Exception instances, so it can be used to make the selection automatic. The ExceptionGroup constructor, on the other hand, raises a TypeError if any contained exception is not an Exception subclass.

예외 그룹은 포함된 예외의 유형에 대한 generic 입니다.

excs 매개변수는 모든 시퀀스여도 되지만, 리스트와 튜플이 여기서 더 효율적으로 처리됩니다. 최적의 성능을 위해 excs 로 튜플을 전달하십시오.

message

생성자에 전달되는 msg 인수입니다. 이는 읽기 전용 속성입니다.

exceptions

생성자에 주어진 excs 시퀀스에 포함된 예외들의 튜플입니다. 이는 읽기 전용 속성입니다.

subgroup(condition)

현재 그룹에서 condition 과 일치하는 예외들만 포함하는 예외 그룹을 반환하며, 결과가 비어 있는 경우 None 을 반환합니다.

조건은 예외 타입이나 예외 타입의 튜플이 될 수 있으며, 이 경우 각 예체는 except 절에서 사용하는 것과 동일한 검사를 통해 일치 여부가 확인됩니다. 조건은 또한 예외를 단일 인자로 받아 해당 서브 그룹에 포함되어야 하는 예외에 대해 True를 반환하는 호출 가능한(타입 객체 제외) 객체일 수도 있습니다.

결과 내에서 현재 예외의 중첩 구조가 유지되며, message, __traceback__, __cause__, __context__, 그리고 __notes__ 필드 값도 그대로 유지됩니다. 비어 있는 중첩 그룹은 결과에서 제외됩니다.

상위 수준 및 모든 중첩된 예외 그룹을 포함하여 중첩된 예외 그룹 내의 모든 예시에 대해 조건이 확인됩니다. 해당 예외 그룹에 대해 조건이 참이면, 해당 그룹이 전체 포함된 상태로 결과에 포함됩니다.

Added in version 3.13: condition 은 타입 객체가 아닌 모든 호출 가능한 객체가 될 수 있습니다.

split(condition)

subgroup`와 유사하지만, ``match``가 ``subgroup(condition)``이고 ``rest``가 일치하지 않는 나머지 부분인 ``(match, rest)`() 쌍을 반환합니다.

derive(excs)

동일한 message 를 가지되, excs 에 있는 예외들을 래핑한 예외 그룹을 반환합니다.

이 메서드는 예외 그룹을 분할하는 데 사용되는 다양한 상황에서 활용되는 subgroup()split() 에서 사용됩니다. 서브 클래스는 subgroup()split()ExceptionGroup 대신 해당 서브 클래스의 인스턴스를 반환하도록 하려면 이 메서드를 오버라이드해야 합니다.

subgroup()split() 은 원본 예외 그룹의 __traceback__, __cause__, __context__, __notes__ 필드를 derive() 가 반환하는 그룹으로 복사하므로, derive() 에서 이러한 필드들을 별도로 업데이트할 필요가 없습니다.

>>> class MyGroup(ExceptionGroup):
...     def derive(self, excs):
...         return MyGroup(self.message, excs)
...
>>> e = MyGroup("eg", [ValueError(1), TypeError(2)])
>>> e.add_note("a note")
>>> e.__context__ = Exception("context")
>>> e.__cause__ = Exception("cause")
>>> try:
...    raise e
... except Exception as e:
...    exc = e
...
>>> match, rest = exc.split(ValueError)
>>> exc, exc.__context__, exc.__cause__, exc.__notes__
(MyGroup('eg', [ValueError(1), TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])
>>> match, match.__context__, match.__cause__, match.__notes__
(MyGroup('eg', [ValueError(1)]), Exception('context'), Exception('cause'), ['a note'])
>>> rest, rest.__context__, rest.__cause__, rest.__notes__
(MyGroup('eg', [TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])
>>> exc.__traceback__ is match.__traceback__ is rest.__traceback__
True

BaseExceptionGroup__new__() 를 정의하므로, 다른 생성자 시그니처가 필요한 서브 클래스는 __init__() 대신 이를 오버라이드해야 합니다. 예를 들어, 다음은 exit_code를 수락하고 이를 통해 그룹의 메시지를 구성하는 예외 그룹 서브 클래스를 정의한 예입니다.

class Errors(ExceptionGroup):
   def __new__(cls, errors, exit_code):
      self = super().__new__(Errors, f"exit code: {exit_code}", errors)
      self.exit_code = exit_code
      return self

   def derive(self, excs):
      return Errors(excs, self.exit_code)

ExceptionGroup 과 마찬가지로, Exception 의 서브 클래스인 모든 BaseExceptionGroup 서브 클래스는 Exception 인스턴스만 래핑할 수 있습니다.

Added in version 3.11.

예외 계층 구조

내장 예외의 클래스 계층 구조는 다음과 같습니다:

BaseException
 ├── BaseExceptionGroup
 ├── GeneratorExit
 ├── KeyboardInterrupt
 ├── SystemExit
 └── Exception
      ├── ArithmeticError
      │    ├── FloatingPointError
      │    ├── OverflowError
      │    └── ZeroDivisionError
      ├── AssertionError
      ├── AttributeError
      ├── BufferError
      ├── EOFError
      ├── ExceptionGroup [BaseExceptionGroup]
      ├── ImportError
      │    └── ModuleNotFoundError
      ├── LookupError
      │    ├── IndexError
      │    └── KeyError
      ├── MemoryError
      ├── NameError
      │    └── UnboundLocalError
      ├── OSError
      │    ├── BlockingIOError
      │    ├── ChildProcessError
      │    ├── ConnectionError
      │    │    ├── BrokenPipeError
      │    │    ├── ConnectionAbortedError
      │    │    ├── ConnectionRefusedError
      │    │    └── ConnectionResetError
      │    ├── FileExistsError
      │    ├── FileNotFoundError
      │    ├── InterruptedError
      │    ├── IsADirectoryError
      │    ├── NotADirectoryError
      │    ├── PermissionError
      │    ├── ProcessLookupError
      │    └── TimeoutError
      ├── ReferenceError
      ├── RuntimeError
      │    ├── NotImplementedError
      │    ├── PythonFinalizationError
      │    └── RecursionError
      ├── StopAsyncIteration
      ├── StopIteration
      ├── SyntaxError
      │    └── IndentationError
      │         └── TabError
      ├── SystemError
      ├── TypeError
      ├── ValueError
      │    └── UnicodeError
      │         ├── UnicodeDecodeError
      │         ├── UnicodeEncodeError
      │         └── UnicodeTranslateError
      └── Warning
           ├── BytesWarning
           ├── DeprecationWarning
           ├── EncodingWarning
           ├── FutureWarning
           ├── ImportWarning
           ├── PendingDeprecationWarning
           ├── ResourceWarning
           ├── RuntimeWarning
           ├── SyntaxWarning
           ├── UnicodeWarning
           └── UserWarning

분실물 보관소