내장 예외(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을 사용하면 표시 목적상(예:KeyError를AttributeError로 변환) 기존 예외를 새 예외로 교체하면서도 디버깅 시 내부 조사를 위해 기존 예외를__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)
- 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 LookupError¶
매핑 또는 시퀀스에서 사용되는 키나 인덱스가 유효하지 않을 때 발생하는 예환들의 베이스 클래스입니다:
IndexError,KeyError. 이는codecs.lookup()에 의해 직접 발생할 수 있습니다.
구체적인 예환(Concrete exceptions)¶
다음은 통상적으로 발생하는 예환들입니다.
- exception AttributeError¶
어트리뷰트 참조(참고: 어트리뷰트 참조)나 할당이 실패할 때 발생합니다. (객체가 어트리뷰트 참조나 할당을 전혀 지원하지 않는 경우,
TypeError가 발생합니다.)선택적 name 및 obj 키워드 전용 인자는 해당 어트리뷰트를 설정합니다:
- name¶
액세스를 시도한 어트리뷰트의 이름입니다.
- obj¶
해당 이름의 어트리뷰트에 대해 접근한 객체입니다.
- 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 리스트”에 포함된 이름이 존재하지 않을 때 발생합니다.선택적 name 및 path 키워드 전용 인자는 해당 어트리뷰트를 설정합니다:
- name¶
임포트를 시도한 모듈의 이름입니다.
- path¶
예황을 유발한 파일의 경로입니다.
- 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으로 설정하십시오.조심
NotImplementedError와NotImplemented는 서로 대체할 수 없습니다. 이 예외는 위에 설명된 대로만 사용되어야 하며, 내장 상수의 올바른 사용법에 대한 자세한 내용은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.error및mmap.error가OSError로 통합되었으며, 생성자는 하위 클래스를 반환할 수 있습니다.버전 3.4에서 변경:
filename어트리뷰트는 이제 파일 시스템 인코딩 및 에러 처리기 에서 인코딩되거나 디코딩된 이름이 아니라 함수에 전달된 원래 파일 이름입니다. 또한 filename2 생성자 인자 및 어트리뷰트가 추가되었습니다.
- exception OverflowError¶
산술 연산 결과가 표현하기에 너무 클 때 발생합니다. 정수형의 경우 표현이 불가능할 경우
MemoryError를 발생시키기 때문에 발생하지 않습니다. 그러나 역사적인 이유로 인해 필수 범위를 약간 벗어난 정수에 대해서도 때때로 OverflowError가 발생합니다. C에서 부동 소수점 예외 처리가 표준화되어 있지 않기 때문에 대부분의 부동 소수점 연산은 확인되지 않습니다.
- exception PythonFinalizationError¶
이 예환은
RuntimeError에서 파생되었습니다. Python 마무리 라고도 알려진 인터프리터 종료 중에 작업이 차단될 때 발생합니다.Python 마무리 과정에서
PythonFinalizationError와 함께 차단될 수 있는 작업의 예는 다음과 같습니다.새로운 Python 스레드 생성.
실행 중인 데몬 스레드를
Join.그렇지 않았으면 교착 상태(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_lineno및end_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¶
코덱이 인코딩 또는 디코딩을 시도하던 객체입니다.
- 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) 동작으로 설정된 객체(예: 소켓)에서 연산이 차단될 때 발생합니다.
errno의EAGAIN,EALREADY,EWOULDBLOCK,EINPROGRESS에 해당합니다.OSError외에도BlockingIOError는 다음과 같은 한 가지 어트리뷰스를 더 가질 수 있습니다:
- exception ConnectionError¶
연결 관련 문제에 대한 기본 클래스입니다.
서브 클래스는
BrokenPipeError,ConnectionAbortedError,ConnectionRefusedError,ConnectionResetError입니다.
- exception BrokenPipeError¶
ConnectionError의 서브 클래스로서, 반대편이 닫힌 파이프에 쓰려고 하거나 쓰기가 종료된 소켓에 쓰려고 할 때 발생합니다.errnoEPIPE및ESHUTDOWN에 해당합니다.
- exception ConnectionAbortedError¶
ConnectionError의 서브 클래스로서, 연결 시도가 상대방에 의해 중단될 때 발생합니다.errnoECONNABORTED에 해당합니다.
- exception ConnectionRefusedError¶
ConnectionError의 서브 클래스로서, 연결 시도가 상대방에 의해 거부될 때 발생합니다.errnoECONNREFUSED에 해당합니다.
- exception ConnectionResetError¶
ConnectionError의 서브 클래스로서, 연결이 상대방에 의해 리셋될 때 발생합니다.errnoECONNRESET에 해당합니다.
- exception InterruptedError¶
시스템 호출이 들어오는 시그널에 의해 중단될 때 발생합니다.
errnoEINTR에 해당합니다.버전 3.5에서 변경: 파이썬은 이제 시스템 호출이 시그널에 의해 중단될 때, 시그널 처리기가 예외를 발생시키지 않는 경우(관련 근거는 PEP 475 참조)
InterruptedError를 발생시키는 대신 시스템 호출을 재시도합니다.
- exception IsADirectoryError¶
Raised when a file operation (such as
os.remove()) is requested on a directory. Corresponds toerrnoEISDIR.
- exception NotADirectoryError¶
디렉터리가 아닌 대상에 대해 디렉터리 작업(예:
os.listdir())이 요청될 때 발생합니다. 대부분의 POSIX 플랫폼에서는 디렉터리가 아닌 파일을 디렉터리인 것처럼 열거나 탐색하려고 할 때도 발생할 수 있습니다.errnoENOTDIR에 해당합니다.
- exception PermissionError¶
적절한 접근 권한(예: 파일 시스템 권한) 없이 연산을 실행하려고 할 때 발생합니다.
errnoEACCES,EPERM, 및ENOTCAPABLE에 해당합니다.버전 3.11.1에서 변경: WASI의
ENOTCAPABLE이 이제PermissionError로 매핑됩니다.
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 ResourceWarning¶
리소스 사용과 관련된 경고의 베이스 클래스.
기본 경고 필터에 의해 무시됩니다. Python Development Mode 를 활성화하면 이 경고가 표시됩니다.
Added in version 3.2.
예외 그룹¶
서로 관련 없는 여러 예외를 발생시켜야 할 때 다음 내용이 사용됩니다. 이들은 예외 계층 구조의 일부이므로 다른 모든 예시와 마찬가지로 except 를 사용하여 처리할 수 있습니다. 또한, 이들은 포함된 예외의 유형에 따라 하위 그룹을 매칭하는 except* 에 의해 인식됩니다.
- exception ExceptionGroup(msg, excs)¶
- exception BaseExceptionGroup(msg, excs)¶
이 두 예외 유형 모두
excs시퀀스에 있는 예외를 래핑합니다.msg매개변수는 문자열이어야 합니다. 두 클래스의 차이점은BaseExceptionGroup이BaseException을 상속받아 모든 예외를 래핑할 수 있는 반면,ExceptionGroup은Exception을 상속받아Exception의 서브 클래스만 래핑할 수 있다는 점입니다. 이 설계는except Exception이ExceptionGroup은 잡지만BaseExceptionGroup은 잡지 못하게 하기 위함입니다.The
BaseExceptionGroupconstructor returns anExceptionGrouprather than aBaseExceptionGroupif all contained exceptions areExceptioninstances, so it can be used to make the selection automatic. TheExceptionGroupconstructor, on the other hand, raises aTypeErrorif any contained exception is not anExceptionsubclass.예외 그룹은 포함된 예외의 유형에 대한 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