Python에서 모든 예외는 BaseException에서 파생되는 클래스의 인스턴스여야 합니다. 특정 클래스를 언급하는 except 절이 있는 try 문에서 해당 절은 해당 클래스에서 파생된 모든 예외 클래스도 처리합니다(단, 파생된 예외 클래스는 아님). 서브클래싱을 통해 관련되지 않은 두 예외 클래스는 이름이 같더라도 결코 동일하지 않습니다.
아래에 나열된 기본 제공 예외는 인터프리터 또는 기본 제공 함수에 의해 생성될 수 있습니다. 언급된 경우를 제외하고 오류의 자세한 원인을 나타내는 “연관된 값”이 있습니다. 이것은 문자열이거나 여러 정보 항목의 튜플(예: 오류 코드 및 코드를 설명하는 문자열)일 수 있습니다. 연관된 값은 일반적으로 예외 클래스의 생성자에 대한 인수로 전달됩니다.
사용자 코드는 기본 제공 예외를 발생시킬 수 있습니다. 이는 예외 처리기를 테스트하거나 인터프리터가 동일한 예외를 발생시키는 상황과 “같은” 오류 조건을 보고하는 데 사용할 수 있습니다. 그러나 사용자 코드가 부적절한 오류를 발생시키는 것을 막을 방법이 없다는 점에 유의하십시오.
내장된 예외 클래스는 새 예외를 정의하기 위해 서브클래싱될 수 있습니다. 프로그래머는 BaseException이 아닌 Exception 클래스 또는 하위 클래스 중 하나에서 새 예외를 파생시키는 것이 좋습니다. 예외 정의에 대한 자세한 내용은 Python 자습서의 사용자 정의 예외에서 확인할 수 있습니다.
Exception context
다른 예외가 이미 처리되고 있는 동안 새 예외를 발생시키면 새 예외의 __context__ 속성이 자동으로 처리된 예외로 설정됩니다. except나 finally 절, with 문이 사용될 때 예외가 처리될 수 있습니다.
이 암시적 예외 컨텍스트는 from을 raise와 함께 사용하여 명시적 원인으로 보완할 수 있습니다.
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인 경우에만 표시됩니다.
어느 경우든 예외 자체는 항상 연결된 예외 뒤에 표시되므로 트레이스백의 마지막 줄이 항상 발생한 마지막 예외를 표시합니다.
Inheriting from built-in exceptions
사용자 코드는 예외 유형에서 상속되는 하위 클래스를 만들 수 있습니다. 베이스가 args 속성을 처리하는 방법과 메모리 레이아웃 비호환성으로 인한 충돌 가능성을 피하기 위해 한 번에 하나의 예외 유형만 하위 클래스로 만드는 것이 좋습니다.
CPython 구현 세부 사항: 대부분의 내장 예외는 효율성을 위해 C로 구현됩니다. Objects/exceptions.c를 참조하십시오. 일부는 여러 예외 유형에서 상속되는 하위 클래스를 만드는 것을 불가능하게 만드는 사용자 정의 메모리 레이아웃을 가지고 있습니다. 유형의 메모리 레이아웃은 구현 세부 사항이며 Python 버전 간에 변경되어 향후 새로운 충돌로 이어질 수 있습니다. 따라서 여러 예외 유형을 함께 서브클래싱하지 않는 것이 좋습니다.
Base classes
다음 예외는 대부분 다른 예외의 기본 클래스로 사용됩니다.
exception BaseException
모든 기본 제공 예외의 기본 클래스입니다. 사용자 정의 클래스에 의해 직접 상속되는 것은 아닙니다(이를 위해 Exception 사용). 이 클래스의 인스턴스에서 str()이 호출되면 인스턴스에 대한 인수의 표현이 반환되거나 인수가 없는 경우 빈 문자열이 반환됩니다.
args
예외 생성자에 제공된 인수 튜플입니다. 일부 기본 제공 예외(예: OSError)는 특정 수의 인수를 예상하고 이 튜플의 요소에 특별한 의미를 할당하는 반면, 다른 예외는 일반적으로 오류 메시지를 제공하는 단일 문자열로만 호출됩니다.
with_traceback(tb)
이 메소드는 tb를 예외에 대한 새로운 트레이스백으로 설정하고 예외 객체를 반환합니다. PEP 3134의 예외 연결 기능을 사용할 수 있게 되기 전에 더 일반적으로 사용되었습니다. 다음 예제는 트레이스백을 유지하면서 SomeException 인스턴스를 OtherException 인스턴스로 변환하는 방법을 보여줍니다. 제기되면 현재 프레임은 OtherException의 트레이스백으로 푸시됩니다. 이는 원래 SomeException의 트레이스백이 호출자에게 전파되도록 허용한 경우 발생했을 것입니다.
try:
...
except SomeException:
tb = sys.exc_info()[2]
raise OtherException(...).with_traceback(tb)
add_note(note)
예외 문자열 뒤의 표준 트레이스백에 나타나는 예외 노트에 문자열 노트를 추가합니다. note가 문자열이 아니면 TypeError가 발생합니다.
버전 3.11의 새로운 기능.
__notes__
add_note()로 추가된 이 예외의 메모 목록입니다. 이 속성은 add_note()가 호출될 때 생성됩니다.
버전 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가 발생합니다.)
name 및 obj 특성은 생성자에 대한 키워드 전용 인수를 사용하여 설정할 수 있습니다. 설정되면 각각 액세스를 시도한 속성의 이름과 해당 속성에 대해 액세스한 객체를 나타냅니다.
버전 3.10에서 변경: name 및 obj 속성을 추가했습니다.
exception EOFError
input() 함수가 데이터를 읽지 않고 파일 끝 조건(EOF)에 도달하면 발생합니다. (주의: io.IOBase.read() 및 io.IOBase.readline() 메서드는 EOF에 도달하면 빈 문자열을 반환합니다.)
exception FloatingPointError
현재 사용되지 않습니다.
exception GeneratorExit
제너레이터 또는 코루틴이 닫힐 때 발생합니다. generator.close() 및 coroutine.close()를 참조하십시오. 기술적으로 오류가 아니기 때문에 Exception 대신 BaseException에서 직접 상속합니다.
exception ImportError
import 문이 모듈을 로드하는 데 문제가 있을 때 발생합니다. from … import의 “from list”에 찾을 수 없는 이름이 있는 경우에도 발생합니다.
이름 및 경로 특성은 생성자에 대한 키워드 전용 인수를 사용하여 설정할 수 있습니다. 설정되면 가져오기를 시도한 모듈의 이름과 예외를 트리거한 파일의 경로를 각각 나타냅니다.
버전 3.3에서 변경: 이름 및 경로 속성을 추가했습니다.
exception ModuleNotFoundError
모듈을 찾을 수 없을 때 가져오기에 의해 발생하는 ImportError 의 하위 클래스입니다. sys.modules에서 None이 발견될 때도 발생합니다.
버전 3.6의 새로운 기능.
exception IndexError
시퀀스 첨자가 범위를 벗어날 때 발생합니다. (슬라이스 인덱스는 허용된 범위에 속하도록 자동으로 잘립니다. 인덱스가 정수가 아니면 TypeError가 발생합니다.)
exception KeyError
기존 키 집합에서 매핑(사전) 키를 찾을 수 없을 때 발생합니다.
exception KeyboardInterrupt
사용자가 인터럽트 키(일반적으로 Control-C 또는 Delete)를 눌렀을 때 발생합니다. 실행 중에 정기적으로 인터럽트를 확인합니다. 예외는 Exception을 포착하는 코드에 실수로 포착되지 않도록 BaseException에서 상속되어 인터프리터가 종료되는 것을 방지합니다.
참고 KeyboardInterrupt를 포착하려면 특별한 고려가 필요합니다. 예측할 수 없는 지점에서 발생할 수 있기 때문에 경우에 따라 실행 중인 프로그램이 일관성 없는 상태로 남을 수 있습니다. 일반적으로 KeyboardInterrupt가 가능한 한 빨리 프로그램을 종료하도록 허용하거나 완전히 발생시키지 않는 것이 가장 좋습니다. (신호 처리기 및 예외에 대한 참고 사항을 참조하십시오.)
exception MemoryError
작업의 메모리가 부족하지만 상황이 여전히 복구될 수 있을 때 발생합니다(일부 객체를 삭제하여). 관련 값은 메모리가 부족한 (내부) 작업의 종류를 나타내는 문자열입니다. 기본 메모리 관리 아키텍처(C의 malloc() 함수) 때문에 인터프리터가 항상 이 상황에서 완전히 복구할 수 있는 것은 아닙니다. 그럼에도 불구하고 폭주 프로그램이 원인인 경우 스택 트레이스백을 인쇄할 수 있도록 예외를 발생시킵니다.
exception NameError
로컬 또는 전역 이름을 찾을 수 없을 때 발생합니다. 이는 규정되지 않은 이름에만 적용됩니다. 연관된 값은 찾을 수 없는 이름을 포함하는 오류 메시지입니다.
name 특성은 생성자에 대한 키워드 전용 인수를 사용하여 설정할 수 있습니다. 설정되면 액세스를 시도한 변수의 이름을 나타냅니다.
버전 3.10에서 변경: 이름 속성을 추가했습니다.
exception NotImplementedError
이 예외는 RuntimeError에서 파생됩니다. 사용자 정의 기본 클래스에서 추상 메서드는 메서드를 재정의하기 위해 파생 클래스가 필요하거나 실제 구현을 추가해야 함을 나타내기 위해 클래스가 개발되는 동안 이 예외를 발생시켜야 합니다.
참고 연산자나 메서드가 전혀 지원되지 않음을 나타내기 위해 사용해서는 안 됩니다. 이 경우 연산자/메서드를 정의되지 않은 상태로 두거나 하위 클래스인 경우 None으로 설정하십시오.
참고 NotImplementedError와 NotImplemented는 이름과 용도가 비슷하더라도 서로 바꿔 사용할 수 없습니다. 사용 시기에 대한 자세한 내용은 NotImplemented를 참조하세요.
exception OSError([arg])
exception OSError(errno, strerror[, filename[, winerror[, filename2]]])
예외 OSError(errno, strerror[, 파일 이름[, winerror[, 파일 이름2]]])
이 예외는 시스템 함수가 “파일을 찾을 수 없음” 또는 “디스크 가득 참”(잘못된 인수 유형 또는 기타 부수적인 오류가 아님)과 같은 I/O 실패를 포함하여 시스템 관련 오류를 반환할 때 발생합니다.
생성자의 두 번째 형식은 아래에 설명된 해당 특성을 설정합니다. 지정되지 않은 경우 속성은 기본적으로 없음으로 설정됩니다. 이전 버전과의 호환성을 위해 세 개의 인수가 전달되면 args 특성에는 처음 두 생성자 인수의 2-튜플만 포함됩니다.
생성자는 실제로 i에서 설명한 것처럼 실제로 OSError의 하위 클래스를 반환하는 경우가 많습니다.
errno
C 변수 errno의 숫자 오류 코드입니다.
winerror
Windows에서는 기본 Windows 오류 코드를 제공합니다. 그런 다음 errno 속성은 해당 네이티브 오류 코드를 POSIX 용어로 대략적으로 번역한 것입니다.
Windows에서 winerror 생성자 인수가 정수인 경우 errno 속성은 Windows 오류 코드에서 결정되며 errno 인수는 무시됩니다. 다른 플랫폼에서는 winerror 인수가 무시되고 winerror 속성이 존재하지 않습니다.
strerror
운영 체제에서 제공하는 해당 오류 메시지. POSIX에서는 C 함수 perror()로, Windows에서는 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 RecursionError
이 예외는 RuntimeError에서 파생됩니다. 인터프리터가 최대 재귀 깊이(sys.getrecursionlimit() 참조)를 초과했음을 감지하면 발생합니다.
버전 3.5의 새로운 기능: 이전에는 일반 RuntimeError가 발생했습니다.
exception ReferenceError
이 예외는 weakref.proxy() 함수에 의해 생성된 약한 참조 프록시가 가비지 수집된 후 참조 대상의 속성에 액세스하는 데 사용될 때 발생합니다. 약한 참조에 대한 자세한 내용은 weakref 모듈을 참조하세요.
exception RuntimeError
다른 범주에 속하지 않는 오류가 감지될 때 발생합니다. 관련 값은 정확히 무엇이 잘못되었는지 나타내는 문자열입니다.
exception StopIteration
내장 함수 next()와 반복자의 __next__() 메서드에 의해 발생하여 반복자가 생성한 항목이 더 이상 없다는 신호를 보냅니다.
예외 개체에는 예외를 생성할 때 인수로 제공되는 단일 속성 값이 있으며 기본값은 None입니다.
생성기 또는 코루틴 함수가 반환되면 새 StopIteration 인스턴스가 발생하고 함수에서 반환된 값이 예외 생성자에 대한 값 매개 변수로 사용됩니다.
생성기 코드가 직접 또는 간접적으로 StopIteration을 발생시키면 RuntimeError로 변환됩니다(StopIteration을 새 예외의 원인으로 유지).
버전 3.3에서 변경: 값 속성을 추가하고 생성기 함수가 값을 반환하는 데 사용할 수 있는 기능을 추가했습니다.
버전 3.5에서 변경: from __future__ import generator_stop을 통해 RuntimeError 변환을 도입했습니다(PEP 479 참조).
버전 3.7에서 변경: 기본적으로 모든 코드에 대해 PEP 479를 활성화합니다. 생성기에서 발생하는 StopIteration 오류는 RuntimeError로 변환됩니다.
exception StopAsyncIteration
반복을 중지하려면 비동기 이터레이터 객체의 __anext__() 메서드에 의해 발생되어야 합니다.
버전 3.5의 새로운 기능.
exception SyntaxError(message, details)
예외 SyntaxError(메시지, 세부 정보)
구문 분석기가 구문 오류를 발견하면 발생합니다. 이는 import 문, 내장 함수 compile(), exec() 또는 eval() 호출에서 또는 초기 스크립트 또는 표준 입력을 읽을 때(역시 대화식으로) 발생할 수 있습니다.
예외 인스턴스의 str()은 오류 메시지만 반환합니다. Details는 멤버가 별도의 속성으로도 사용 가능한 튜플입니다.
filename
구문 오류가 발생한 파일의 이름입니다.
lineno
오류가 발생한 파일의 줄 번호입니다. 이것은 1-색인입니다. 파일의 첫 번째 줄에는 lineno가 1입니다.
offset
오류가 발생한 줄의 열입니다. 이것은 1-인덱스입니다: 라인의 첫 번째 문자는 1의 오프셋을 가집니다.
text
오류와 관련된 소스 코드 텍스트입니다.
end_lineno
오류가 발생한 파일의 라인 번호가 끝나는 줄
end_offset
오류가 발생한 끝 줄의 열이 끝납니다. 이것은 1-인덱스입니다: 라인의 첫 번째 문자는 1의 오프셋을 가집니다.
f-문자열 필드 오류의 경우 메시지 앞에 “f-string:”이 붙고 오프셋은 대체 표현식에서 구성된 텍스트의 오프셋입니다. 예를 들어 f’Bad {a b} 필드’를 컴파일하면 다음 인수 a가 됩니다.
버전 3.10에서 변경: end_lineno 및 end_offset 속성을 추가했습니다.
exception IndentationError
잘못된 들여쓰기와 관련된 구문 오류의 기본 클래스입니다. 이것은 SyntaxError의 하위 클래스입니다.
exception TabError
들여쓰기에 탭과 공백이 일관되지 않게 사용되었을 때 발생합니다. 이것은 IndentationError의 하위 클래스입니다.
exception SystemError
인터프리터가 내부 오류를 발견했지만 모든 희망을 포기할 정도로 상황이 심각해 보이지 않을 때 발생합니다. 연결된 값은 무엇이 잘못되었는지 나타내는 문자열입니다(낮은 수준의 용어로).
Python 인터프리터의 작성자 또는 관리자에게 이를 보고해야 합니다. Python 인터프리터의 버전(sys.version; 대화식 Python 세션 시작 시에도 인쇄됨), 정확한 오류 메시지(예외 관련 값) 및 가능한 경우 오류를 트리거한 프로그램의 소스를 보고해야 합니다. 오류.
exception SystemExit
이 예외는 sys.exit() 함수에 의해 발생합니다. Exception을 catch하는 코드에 실수로 catch되지 않도록 Exception 대신 BaseException에서 상속합니다. 이렇게 하면 예외가 제대로 전파되어 인터프리터가 종료될 수 있습니다. 처리되지 않으면 Python 인터프리터가 종료됩니다. 스택 트레이스백이 인쇄되지 않습니다. 생성자는 sys.exit()에 전달된 것과 동일한 선택적 인수를 허용합니다. 값이 정수이면 시스템 종료 상태를 지정합니다(C의 exit() 함수에 전달됨). None이면 종료 상태는 0입니다. 다른 유형(예: 문자열)이 있는 경우 객체의 값이 인쇄되고 종료 상태는 1입니다.
sys.exit()에 대한 호출은 예외로 변환되어 정리 처리기(마지막으로 try 문의 절)를 실행할 수 있고 디버거가 통제력을 잃지 않고 스크립트를 실행할 수 있습니다. os._exit() 함수는 즉시 종료하는 것이 절대적으로 필요한 경우에 사용할 수 있습니다(예: os.fork() 호출 후 자식 프로세스에서).
code
생성자에게 전달되는 종료 상태 또는 오류 메시지입니다. (기본값은 없음입니다.)
exception TypeError
연산이나 함수가 부적절한 유형의 객체에 적용될 때 발생합니다. 관련 값은 유형 불일치에 대한 세부 정보를 제공하는 문자열입니다.
이 예외는 개체에 대한 시도된 작업이 지원되지 않으며 지원되지 않음을 나타내기 위해 사용자 코드에 의해 발생할 수 있습니다. 개체가 주어진 작업을 지원하기 위한 것이지만 아직 구현을 제공하지 않은 경우 NotImplementedError를 발생시키는 적절한 예외입니다.
잘못된 유형의 인수를 전달하면(예: int가 예상될 때 목록을 전달하는 경우) TypeError가 발생하지만 잘못된 값(예: 예상 범위를 벗어난 숫자)이 있는 인수를 전달하면 ValueError가 발생해야 합니다.
exception UnboundLocalError
함수나 메서드에서 지역 변수에 대한 참조가 만들어졌지만 해당 변수에 바인딩된 값이 없을 때 발생합니다. 이것은 NameError의 하위 클래스입니다.
exception UnicodeError
유니코드 관련 인코딩 또는 디코딩 오류가 발생할 때 발생합니다. ValueError의 하위 클래스입니다.
UnicodeError에는 인코딩 또는 디코딩 오류를 설명하는 특성이 있습니다. 예를 들어 err.object[err.start:err.end]는 코덱이 실패한 특정 잘못된 입력을 제공합니다.
encoding
오류를 발생시킨 인코딩의 이름입니다.
reason
특정 코덱 오류를 설명하는 문자열입니다.
object
코덱이 인코딩 또는 디코딩을 시도한 개체입니다.
start
개체에 있는 잘못된 데이터의 첫 번째 인덱스입니다.
end
개체의 마지막 유효하지 않은 데이터 뒤의 인덱스입니다.
exception UnicodeEncodeError
인코딩 중에 유니코드 관련 오류가 발생하면 발생합니다. UnicodeError의 하위 클래스입니다.
exception UnicodeDecodeError
디코딩 중에 유니코드 관련 오류가 발생하면 발생합니다. UnicodeError의 하위 클래스입니다.
exception UnicodeTranslateError
번역 중에 유니코드 관련 오류가 발생하면 발생합니다. UnicodeError의 하위 클래스입니다.
exception ValueError
연산이나 함수가 올바른 유형이지만 부적절한 값을 가진 인수를 받고 상황이 IndexError와 같은 더 정확한 예외로 설명되지 않을 때 발생합니다.
exception ZeroDivisionError
나누기 또는 모듈로 연산의 두 번째 인수가 0일 때 발생합니다. 연결된 값은 피연산자와 연산의 유형을 나타내는 문자열입니다.
이전 버전과의 호환성을 위해 다음 예외가 유지됩니다. Python 3.3부터는 OSError의 별칭입니다.
exception EnvironmentError
exception IOError
exception WindowsError
Windows에서만 사용할 수 있습니다.
OS exceptions
다음 예외는 OSError의 하위 클래스이며 시스템 오류 코드에 따라 발생합니다.
exception BlockingIOError
비차단 작업으로 설정된 객체(예: 소켓)에서 작업이 차단될 때 발생합니다. errno EAGAIN, EALREADY, EWOULDBLOCK 및 EINPROGRESS에 해당합니다.
OSError 외에도 BlockingIOError에는 속성이 하나 더 있을 수 있습니다.
characters_written
스트림이 차단되기 전에 스트림에 기록된 문자 수를 포함하는 정수입니다. 이 속성은 io 모듈에서 버퍼링된 I/O 클래스를 사용할 때 사용할 수 있습니다.
exception ChildProcessError
자식 프로세스에 대한 작업이 실패하면 발생합니다. errno ECHILD에 해당합니다.
exception ConnectionError
연결 관련 문제에 대한 기본 클래스입니다.
하위 클래스는 BrokenPipeError
, ConnectionAbortedError
, ConnectionRefusedError
and ConnectionResetError
입니다.
exception BrokenPipeError
다른 쪽 끝이 닫힌 상태에서 파이프에 쓰기를 시도하거나 쓰기를 위해 종료된 소켓에 쓰기를 시도할 때 발생하는 ConnectionError의 하위 클래스입니다. errno EPIPE 및 ESHUTDOWN에 해당합니다.
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에서 변경: 신호 처리기가 InterruptedError를 발생시키는 대신 예외를 발생시키는 경우(이유는 PEP 475 참조)를 제외하고는 신호에 의해 시스템 호출이 중단될 때 Python이 이제 시스템 호출을 재시도합니다.
exception IsADirectoryError
디렉터리에서 파일 작업(예: os.remove())이 요청될 때 발생합니다. 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
시스템 기능이 시스템 수준에서 시간 초과되었을 때 발생합니다. errno ETIMEDOUT에 해당합니다.
버전 3.3의 새로운 기능: 위의 모든 OSError 하위 클래스가 추가되었습니다.
PEP 3151 – OS 및 IO 예외 계층 재작업도 참조하십시오.
Warnings
다음 예외는 경고 범주로 사용됩니다. 자세한 내용은 경고 범주 설명서를 참조하십시오.
exception Warning
경고 범주의 기본 클래스입니다.
exception UserWarning
사용자 코드에서 생성된 경고의 기본 클래스입니다.
exception DeprecationWarning
더 이상 사용되지 않는 기능에 대한 경고가 다른 Python 개발자를 위한 것일 때 해당 경고의 기본 클래스입니다.
__main__ 모듈(PEP 565)을 제외하고 기본 경고 필터에 의해 무시됩니다. Python 개발 모드를 활성화하면 이 경고가 표시됩니다.
폐기 정책은 PEP 387에 설명되어 있습니다.
exception PendingDeprecationWarning
더 이상 사용되지 않고 향후 사용되지 않을 것으로 예상되지만 현재 사용되지 않는 기능에 대한 경고의 기본 클래스입니다.
이 클래스는 곧 있을 지원 중단 가능성에 대한 경고를 내보내는 것이 일반적이지 않기 때문에 거의 사용되지 않으며 DeprecationWarning은 이미 활성화된 지원 중단에 선호됩니다.
기본 경고 필터에 의해 무시됩니다. Python 개발 모드를 활성화하면 이 경고가 표시됩니다.
폐기 정책은 PEP 387에 설명되어 있습니다.
exception SyntaxWarning
모호한 구문에 대한 경고의 기본 클래스입니다.
exception RuntimeWarning
의심스러운 런타임 동작에 대한 경고의 기본 클래스입니다.
exception FutureWarning
더 이상 사용되지 않는 기능에 대한 경고가 Python으로 작성된 애플리케이션의 최종 사용자를 대상으로 하는 경우 해당 경고의 기본 클래스입니다.
exception ImportWarning
모듈 가져오기의 가능한 실수에 대한 경고의 기본 클래스입니다.
기본 경고 필터에 의해 무시됩니다. Python 개발 모드를 활성화하면 이 경고가 표시됩니다.
exception UnicodeWarning
유니코드와 관련된 경고의 기본 클래스입니다.
exception EncodingWarning
인코딩과 관련된 경고의 기본 클래스입니다.
자세한 내용은 옵트인 EncodingWarning을 참조하십시오.
버전 3.10의 새로운 기능.
exception BytesWarning
바이트 및 바이트 배열과 관련된 경고의 기본 클래스입니다.
exception ResourceWarning
리소스 사용과 관련된 경고의 기본 클래스입니다.
기본 경고 필터에 의해 무시됩니다. Python 개발 모드를 활성화하면 이 경고가 표시됩니다.
버전 3.2의 새로운 기능.
Exception groups
다음은 관련 없는 여러 예외를 발생시켜야 할 때 사용됩니다. 예외 계층의 일부이므로 다른 모든 예외와 마찬가지로 예외로 처리할 수 있습니다. 또한 포함된 예외 유형에 따라 하위 그룹을 일치시키는 except*에 의해 인식됩니다.
exception ExceptionGroup(msg, excs)
exception BaseExceptionGroup(msg, excs)
이러한 예외 유형은 모두 예외를 시퀀스 excs로 래핑합니다. msg 매개변수는 문자열이어야 합니다. 두 클래스의 차이점은 BaseExceptionGroup은 BaseException을 확장하고 모든 예외를 래핑할 수 있는 반면 ExceptionGroup은 Exception을 확장하고 Exception의 하위 클래스만 래핑할 수 있다는 것입니다. 이 디자인은 Exception이 BaseExceptionGroup이 아닌 ExceptionGroup을 포착하도록 설계되었습니다.
BaseExceptionGroup 생성자는 포함된 모든 예외가 Exception 인스턴스인 경우 BaseExceptionGroup이 아닌 ExceptionGroup을 반환하므로 선택을 자동으로 만드는 데 사용할 수 있습니다. 반면에 ExceptionGroup 생성자는 포함된 예외가 Exception 하위 클래스가 아닌 경우 TypeError를 발생시킵니다.
message
생성자에 대한 msg 인수입니다. 이것은 읽기 전용 속성입니다.
exceptions
생성자에게 주어진 excs 시퀀스의 예외 튜플. 이것은 읽기 전용 속성입니다.
subgroup(condition)
조건과 일치하는 현재 그룹의 예외만 포함하는 예외 그룹을 반환하거나 결과가 비어 있으면 None을 반환합니다.
조건은 예외를 수락하고 하위 그룹에 있어야 하는 항목에 대해 true를 반환하는 함수이거나 예외 유형 또는 예외 유형의 튜플일 수 있습니다. except 절에서 사용됩니다.
현재 예외의 중첩 구조는 메시지, __traceback__, __cause__, __context__ 및 __notes__ 필드의 값과 마찬가지로 결과에 보존됩니다. 빈 중첩 그룹은 결과에서 생략됩니다.
최상위 수준 및 모든 중첩된 예외 그룹을 포함하여 중첩된 예외 그룹의 모든 예외에 대해 조건이 확인됩니다. 이러한 예외 그룹에 대해 조건이 참이면 전체 결과에 포함됩니다.
split(condition)
subgroup()과 비슷하지만 일치가 하위 그룹(조건)이고 나머지가 일치하지 않는 나머지 부분인 쌍(일치, 나머지)을 반환합니다.
derive(excs)
동일한 메시지가 포함된 예외 그룹을 반환하지만 예외를 excs로 래핑합니다.
이 메서드는 subgroup() 및 split()에서 사용됩니다. subgroup() 및 split()이 ExceptionGroup이 아닌 하위 클래스의 인스턴스를 반환하도록 하려면 하위 클래스가 이를 재정의해야 합니다.
subgroup() 및 split()은 원래 예외 그룹의 __traceback__, __cause__, __context__ 및 __notes__ 필드를 Derive()에서 반환된 항목으로 복사하므로 이러한 필드는 Derive()에서 업데이트할 필요가 없습니다.
>>> class MyGroup(ExceptionGroup):
... def derive(self, exc):
... return MyGroup(self.message, exc)
...
>>> 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의 인스턴스만 래핑할 수 있습니다.
버전 3.11의 새로운 기능.
Exception hierarchy
기본 제공 예외의 클래스 계층 구조는 다음과 같습니다.
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
│ └── 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