1. Exception
Python의 모든 (다룰 수 있는) 예외의 상위 클래스.
Exception: 영어로 “예외”, “특별한 경우”, 또는 “일반 규칙에서 벗어난 것”을 의미.
Python 프로그램에서 예외(Exception)는
- 정상적인 흐름에서 벗어난 상황을 뜻하며,
- 반드시 error를 의미하지는 않음.
- 개발자가 처리할 수 있는 예외는 Exception 클래스로 추상화,
- 이를 포함한 모든 예외는 BaseExcetpion 클래스로 추상화 (이 문서의 아래 참고할 것)
Error 가 아닌 Exception에는
Warning계열이나 Critical Exception (Keyboard Interrupt
나 SystemExit
) 등이 있음.
Exception은
정상적인 프로그램 흐름에 벗어난 특별한 예외적인 상황을 가르키며,
프로그래머의 명백한 오류(Error) 뿐 아니라,
일반적인 흐름과 다른 예외상황들을 포함.
Exception으로는 다음과 같은 것들이 있음.
- Warning:
DeprecationWarning
이나 잠재적 문제 위험을 알리는SyntaxWarning
등.- Warning은 엄밀히 말하면 Exception이 아니며,
- Python에서는 경고 메시지로 프로그램을 종료시키지 않는 특별한 클래스.
- DeprecationWarning, SyntaxWarning과 같은 경고들은 코드를 수정해야 할 가능성이 있음을 알리는 용도.
- Iteraton-related exceptions (
StopIteration, GenerationExit
): 반복루프와 generator의 lifecycle 제어 (특히, 종료시점 파악용)를 위해 사용됨.- StopIteration은 반복이 완료되었을 때 발생하는 예외로, 주로 for 루프나 next() 함수 호출 시 반복이 끝났음을 알림.
- GeneratorExit는 generator가 닫힐 때 발생하며, close() 메서드 호출로 인해 generator가 정상 종료되었음을 나타냄.
- User or System Driven Interruptions: 사용자 또는 시스템이 PVM에 interrupt를 일으키는 특별한 경우 발생.
- KeyboardInterrupt는 사용자가 키보드에서 Ctrl+C를 눌러 프로그램을 중단할 때 발생하는 예외.
- SystemExit는 sys.exit() 호출 시 발생하는 예외로, 프로그램을 정상적으로 종료하기 위해 사용됨.
- Assertions and Resource Issues (
AssertionError, MemoryError
):assert
를 이용한 디버깅 이나,- 컴퓨팅 자원 관련된 Exception.
- Error 계열: 명백히 개발자의 실수로 인한 문제를 일으키는 예외상황.
- SyntaxError, TypeError, ValueError 등 다양한 에러들이 해당
- 주로 개발자의 실수나 코드 오류로 인해 발생하는 예외
2. Error
프로그램이 문제를 일으킨 상태를 설명할 때 주로 사용되는 용어.
(정상에서 벗어났다는 점은 Exception과 유사하나, Error는 문제를 일으킨다고 생각하면 됨)
Error는 사전적으로 “실수”, “잘못”, “오류”를 의미.
컴퓨터 프로그램에서 에러(Error)는
프로그램이 기대하는 동작을 하지 못하고, 문제를 일으키는 상태를 나타냄.
Python에서 Error로 끝나는 예외 클래스들은 명확한 프로그래밍 오류 또는 시스템 오류와 관련이 있으며
- 대부분 개발자의 코드가 잘못된 방식으로 작성되었거나,
- 코드로 인한 명백한 문제로 발생함.
Error라는 이름이 붙은 예외 클래스는
Python에서 프로그래머가 고려하고 처리해야 할 (~Exception)
문제를 일으키는 중요한 오류를 의미.
개발자의 책임으로 일반적으로 여겨지는 Error 는 크게 다음의 두 종류임.
2-1. 문법적 에러 (Syntax Error)
- source code가 해당 프로그래밍 언어의 문법에 어긋나는 경우 발생.
- compiler 또는 interpreter 가 에러정보 출력
2-2. 논리적 에러
- 프로그래머가 알고리즘을 잘못 만들 경우.
- 프로그램 실행 전에 미리 알기 어려움.
- 프로그램 실행시 오동작
- 많은 경우, 이 논리적 에러를 bug(버그)라 부름
- 디버깅 : 버그를 찾아 고치는 과정
3. Python 의 Exception 과 Error.
Python의 예외 클래스 계층은 다음과 같은 구조를 가지고 있음:
- BaseException
- SystemExit
- KeyboardInterrupt
- GeneratorExit
- Exception (가장 일반적으로 사용되는 클래스)
- ArithmeticError (수학 관련 오류)
- ZeroDivisionError
- OverflowError
- FloatingPointError
- LookupError (데이터 조회 관련 오류)
- IndexError
- KeyError
- ValueError (잘못된 값 관련 오류)
- UnicodeError
- TypeError (잘못된 유형 관련 오류)
- FileNotFoundError (파일을 찾을 수 없을 때 발생)
- OSError (운영 체제 관련 오류)
- ArithmeticError (수학 관련 오류)
3-1. BaseException
- 모든 예외의 최상위 클래스.
- Python에서 발생하는 모든 예외는
BaseException
클래스를 상속받음. - 따라서, 모든 예외는
BaseException
의 인스턴스라고 할 수 있음. - 이 클래스는 주로 직접 상속받아 사용하지 않으며, 더 구체적인
Exception
클래스를 상속받아 사용하는 것이 일반적.
3-2. Exception
Exception
클래스는BaseException
을 상속받은 클래스.- 일반적으로 프로그래머가 처리할 수 있는 Error(오류)와 Exception(예외)를 의미.
- 대부분의 사용자 정의 예외와 표준 예외는
Exception
클래스를 상속. try-except
블록에서 발생할 수 있는 거의 모든 예외는Exception
을 잡아 처리.- 예를 들어,
ZeroDivisionError
,ValueError
등의 예외들은 모두Exception
의 하위 클래스임.
3-3. Critical Exceptions (중대한 예외)
SystemExit
,KeyboardInterrupt
,GeneratorExit
와 같은 예외들은Exception
이 아닌BaseException
을 직접 상속.- 이런 예외들은 일반적으로 프로그래머가 잡지 말아야 하거나, 프로그램의 종료와 같은 중요한 상황에서 발생하는 예외.
SystemExit
:sys.exit()
함수가 호출될 때 발생하는 예외.KeyboardInterrupt
: 사용자가 프로그램 실행을 중단하기 위해Ctrl + C
를 누를 때 발생하는 예외.GeneratorExit
: 제너레이터가 종료될 때 발생하는 예외.
3-4. Error
- Python에서
Error
는 특정 예외의 이름에 자주 사용되지만, 독립적인 클래스는 아님. Error
는 보통 특정 유형의 예외에 대한 이름으로 사용됨.- 예를 들어,
ZeroDivisionError
,TypeError
,ValueError
등은 모두Exception
의 서브클래스. - 따라서
Error
는 예외의 한 유형일 뿐, 별도의 상위 클래스는 아님에 유의할 것.
같이보면 좋은 자료들
2023.10.06 - [분류 전체보기] - [Python] Python 정리
https://dsaint31.tistory.com/526
'Python' 카테고리의 다른 글
[Py] 사칙연산 구현 예제 (0) | 2024.11.13 |
---|---|
[ML] Classic Regressor (Summary) (0) | 2024.10.02 |
[Py] Debugging: pdb and ipdb (0) | 2024.09.25 |
[Py] assert 구문 (statement) (0) | 2024.09.24 |
[CV] cv2.calibrateCamera (1) | 2024.09.22 |