본문 바로가기
Python

[Py] Debug: Error and Exception.

by ds31x 2024. 9. 25.

1. Exception

Python의 모든 (다룰 수 있는) 예외의 상위 클래스.

Exception: 영어로 “예외”, “특별한 경우”, 또는 “일반 규칙에서 벗어난 것”을 의미.

 

Python 프로그램에서 예외(Exception)

  • 정상적인 흐름에서 벗어난 상황을 뜻하며,
  • 반드시 error를 의미하지는 않음.
  • 개발자가 처리할 수 있는 예외는 Exception 클래스로 추상화,
  • 이를 포함한 모든 예외는 BaseExcetpion 클래스로 추상화 (이 문서의 아래 참고할 것)

Error 가 아닌 Exception에는

Warning계열이나 Critical Exception (Keyboard InterruptSystemExit) 등이 있음.

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 (운영 체제 관련 오류)

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 정리

 

[Python] Python 정리

Programming Language and Python 소개2023.10.23 - [Python] - [Python] Programming Language and Introduction of Python. [Python] Programming Language and Introduction of Python.Computer and Program https://dsaint31.tistory.com/436 [CE] Computer and Progra

ds31x.tistory.com

https://dsaint31.tistory.com/526

 

[Python] Exception 처리

1. Exception 발생 시 기본 동작Python에서 무엇인가가 잘못된 경우, python interpreter는 exception을 발생시킴.Exception : 동작을 중단시키는 에러를 가르킴.Exception handling : Exception 처리라고도 불리며, 발생

dsaint31.tistory.com

 


 

'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