내가 처음 배운 Handling Exceptions(Error)은 Assert를 사용해 Exit 하는 방식을 사용했습니다.
제가 처음 시작한 프로그램 종류가 디바이스 드라이버 분야라 잘못 코딩을 하면 kernel panic 이 발생 했었습니다.
그 후 다른 프로젝트를 하면 Try Except(Python Document)를 사용하기 시작했습니다.
사실 제품을 만드는 어플리케이션 프로그래머라면 모두 잘 사용하시는 방법으로 사실 학습자와 프로그래머를 구분하는 차이중에 하나라고 생각합니다. 프로그램의 안정성을 위해서라면 당연히 사용을 해야되죠.
Python에서 try
와 except
을 사용하는 이유는 예외 처리를 통해 프로그램의 갑작스러운 종료를 방지하고, 에러 발생 시 적절한 대처를 하기 위해서 입니다.
활용 이유
- 에러가 발생할 가능성이 있는 코드를 안전하게 실행.
- 에러 발생 시 대안 작업 수행.
- 프로그램이 계속 실행될 수 있도록 보장.
장점
- 유연성: 에러 상황에 맞는 처리 가능.
- 가독성: 코드 구조를 명확히 하여 에러 처리를 쉽게 이해.
- 안정성: 프로그램의 예기치 않은 종료를 방지.
단점
- 남용 위험: 예상 가능한 에러를 무시하거나 지나치게 사용하면 디버깅이 어려워짐.
- 성능 저하:
try-except
블록은 약간의 추가 비용 발생. - 명확성 부족: 에러를 구체적으로 처리하지 않으면 문제를 숨길 수 있음.
단점에서 몇몇 개발자들은 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 의 규칙을 정하고 개발팀 전체와 협의를 해야합니다.