브렌쏭의 Veritas_Garage

[우리FISA] Exception Handling 본문

[Project_하다]/[Project_공부]

[우리FISA] Exception Handling

브렌쏭 2024. 7. 15. 17:53

문제는 생기기 전까지 절대 알 수 없다

예외처리

  • 예외가 발생하면 프로그램이 즉시 종료된다.
  • 예외처리를 통해 예외가 발생해도 프로그램이 종료되지 않도록 할 수 있다.
  • try, except, finally 를 사용한다.
try:
    # 예외가 발생할 수 있는 코드
    print(10 / 0)
except ZeroDivisionError as e:
    # 예외가 발생했을 때 실행할 코드
    print(e)
finally:
    # 예외 발생 여부와 상관없이 실행할 코드
    print('finally')

온갖 종류의 예외가 존재한다.

예외의 종류

  1. 실행 시간에 발생하는 예외 (Runtime Error)
    • ZeroDivisionError
    • NameError
    • TypeError
    • ValueError
    • FileNotFoundError
    • KeyboardInterrupt
    • EOFError
    • ...
  2. 문법적으로 발생하는 예외 (Syntax Error)
    • SyntaxError
    • IndentationError
    • TabError
    • ...
  3. 사용자 정의 예외 (User-defined Exception)
    • raise Exception('메시지')
    • raise ValueError('메시지')
    • raise ZeroDivisionError('메시지')
    • ...

예외 구조

  • 모든 예외는 BaseException을 상속받는다.
  • BaseException
    • SystemExit
    • KeyboardInterrupt
    • GeneratorExit
    • Exception
      • StopIteration
      • StopAsyncIteration
      • ArithmeticError
        • FloatingPointError
        • OverflowError
        • ZeroDivisionError
      • AssertionError
      • AttributeError
      • BufferError
      • EOFError
      • ImportError
      • 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
      • SyntaxError
        • IndentationError
          • TabError
      • SystemError
      • TypeError
      • ValueError
        • UnicodeError
          • UnicodeDecodeError
          • UnicodeEncodeError
          • UnicodeTranslateError
      • Warning
        • DeprecationWarning
        • PendingDeprecationWarning
        • RuntimeWarning
        • SyntaxWarning
        • UserWarning
        • FutureWarning
        • ImportWarning
        • UnicodeWarning
        • BytesWarning
        • ResourceWarning

예외 처리 방법

LBYL(Look Before You Leap)
= 에러가 나기 전에 잘 코드를 써라

  • 현실적으로 불가능한 경우가 많다.
  • 코드가 복잡해진다.

EAFP(Easier to Ask for Forgiveness than Permission)
= 허락보다 용서를 구하는 것이 쉽다

  • 일단 코드를 실행하고 예외가 발생하면 예외처리를 하는 방식
  • 파이썬에서 권장하는 방식

traceback

  • 예외가 발생한 위치를 추적하는 모듈
  • traceback.print_exc() : 예외가 발생한 위치를 출력
  • traceback.format_exc() : 예외가 발생한 위치를 문자열로 반환
import traceback

try:
    print(10 / 0)
except ZeroDivisionError as e:
    print(e)
    traceback.print_exc()

assert

  • assert 조건식, '메시지'
  • 조건식이 False이면 AssertionError 예외가 발생한다.
assert 1 == 1, '1이 아닙니다.'
assert 1 == 2, '1이 아닙니다.'

raise

  • raise 예외클래스('메시지')
  • 예외를 강제로 발생시킨다.
raise Exception('예외가 발생했습니다.')

raise ValueError('값이 잘못되었습니다.')

'[Project_하다] > [Project_공부]' 카테고리의 다른 글

[우리FISA] Python Class  (0) 2024.07.16
[우리FISA] OOP  (0) 2024.07.15
[우리FISA] Standard Input/Output, stdio  (0) 2024.07.15
[우리FISA] Python Modules, Library, Package  (0) 2024.07.15
[BoostCouse] NumPy  (1) 2024.07.14
[우리FISA] 5일차 Functions continue.....  (1) 2024.07.12
[우리FISA] 4일차 Function  (0) 2024.07.11
Comments