내가 처음 배운 Handling Exceptions(Error)은 Assert를 사용해 Exit 하는 방식을 사용했습니다.

제가 처음 시작한 프로그램 종류가 디바이스 드라이버 분야라 잘못 코딩을 하면 kernel panic 이 발생 했었습니다.

그 후 다른 프로젝트를 하면 Try Except(Python Document)를 사용하기 시작했습니다.

사실 제품을 만드는 어플리케이션 프로그래머라면 모두 잘 사용하시는 방법으로 사실 학습자와 프로그래머를 구분하는 차이중에 하나라고 생각합니다. 프로그램의 안정성을 위해서라면 당연히 사용을 해야되죠.

Python에서 tryexcept을 사용하는 이유는 예외 처리를 통해 프로그램의 갑작스러운 종료를 방지하고, 에러 발생 시 적절한 대처를 하기 위해서 입니다.

활용 이유

  • 에러가 발생할 가능성이 있는 코드를 안전하게 실행.
  • 에러 발생 시 대안 작업 수행.
  • 프로그램이 계속 실행될 수 있도록 보장.

장점

  1. 유연성: 에러 상황에 맞는 처리 가능.
  2. 가독성: 코드 구조를 명확히 하여 에러 처리를 쉽게 이해.
  3. 안정성: 프로그램의 예기치 않은 종료를 방지.

단점

  1. 남용 위험: 예상 가능한 에러를 무시하거나 지나치게 사용하면 디버깅이 어려워짐.
  2. 성능 저하: try-except 블록은 약간의 추가 비용 발생.
  3. 명확성 부족: 에러를 구체적으로 처리하지 않으면 문제를 숨길 수 있음.

단점에서 몇몇 개발자들은 Handling Exceptions 을 싫어하는 이유가 나옵니다. 저도 프로그래머 새상에 있다보면 분명 버그가 있어서 정상 동작하지 않는데 버그를 찾는게 너무 힘들어 고생 했던 경험을 가지고 있는 사람이 종종 있었습니다.

Handling Exceptions Code

try:
   print('Main code')
   raise e
except Exception as e:
   print('Exception code')
else: # Omitable
   print('If no exception was thrown')
finally: # Omitable
   print('Exception thrown or not, or both')

"""
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
"""

상당히 많은 종류의 except event를 기본적으로 지원 하고 있는데요. event를 굳이 다 알필요는 없습니다. 다만 본격적으로 개발을 하기 시작하면 전체적인 Handling Exceptions 의 규칙을 정하고 개발팀 전체와 협의를 해야합니다.

By Mark

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다