- 고급 함수 인자
파이썬 예외 처리의 핵심
코드를 작성하다 보면 예상치 못한 오류가 언제든 발생할 수 있습니다. 사용자 입력 오류, 파일 접근 실패, 0으로 나누는 연산, 지정하지 않은 변수 접근 등 그 원인은 다양하죠. 이때 파이썬의 예외 처리 기법을 적절히 활용하면 프로그램의 예기치 않은 종료를 효과적으로 막고, 필요한 경우 사용자에게 친절한 안내까지 제공할 수 있습니다.
예외란, 프로그램의 논리적 흐름에 방해를 주는 '이상 상황'입니다. 그러나 단순히 모든 오류를 피할 수는 없습니다. 중요한 것은 오류 발생 시점에 적절하게 대처하는 기술입니다. 이를 위해 try
, except
, else
, finally
, 그리고 raise
등의 문법이 제공됩니다.
예외 발생과 처리: try-except의 활용
예외 처리는 가장 기본적으로 try
블록에 예외가 발생할 수 있는 코드를, except
블록에는 오류 발생 시 실행할 동작을 담아 관리합니다. 기본 형태는 다음과 같습니다.
try:
결과 = 10 / 0
except ZeroDivisionError:
print("0으로는 나눌 수 없습니다.")
except
뒤에 특정 예외 타입을 명시해 원하는 종류의 예외만 처리할 수 있습니다. 만약 다른 예외에 대해서는 별도의 방식으로 분리 처리하고 싶다면, 여러 개의 except
구문을 두어 분기할 수 있습니다. 예를 들어, TypeError
, ValueError
등 다양한 오류 상황에 각각 다르게 대응할 수 있습니다.
예외의 직접 발생과 사용자 정의 예외
필요에 따라 인위적으로 예외를 발생시키고 싶은 경우 raise
문을 쓸 수 있습니다. 예를 들어, 특정 함수 내부에서 잘못된 인자가 들어올 경우 명확하게 예외를 발생해 프로그램 흐름을 제어할 수 있습니다.
더 나아가, 자신의 프로그램에 특화된 예외 클래스를 정의할 수 있습니다. 내장 Exception
클래스를 상속받아 사용자만의 예외 유형을 만듦으로써, 에러 메시지와 처리 방법을 한층 정교하게 관리할 수 있습니다.
class NegativeNumberError(Exception):
def __init__(self, value):
super().__init__(f"음수 값 허용 안됨: {value}")
이처럼 커스텀 예외를 만들어 놓으면, 코드 복잡도가 올라갈수록 더 명확한 오류 추적과 특화된 동작이 가능해집니다.
예외 처리의 모범 사례
예외 처리의 목적은 프로그램의 견고함을 높이고, 사용자가 보다 안전하게 소프트웨어를 사용할 수 있게 하는 데 있습니다. 하지만 모든 예외를 한꺼번에 잡는 것은 권장하지 않습니다. except Exception:
또는 아무 타입도 지정하지 않은 except 블록은 예상하지 못한 문제를 숨길 수 있어 버그 발견이 어려워질 수 있습니다.
가능한 한 발생 가능한 오류만 정확하게 처리하고, 예외의 원인을 로그로 남기거나 별도의 로깅 시스템을 구축해 추적하는 것이 좋습니다. 또한 finally 블록을 활용하면 파일 닫기, 네트워크 연결 종료 등 '정리 작업'을 예외 발생 여부와 관계없이 안전하게 수행할 수 있습니다.
현장에서 자주 쓰이는 팁은 다음과 같습니다. 입력값 검증은 사전에 철저히 하고, 불가피한 에러만 try-except로 감싸세요. 예외 처리 구문 안에는 최소한의 코드를 담아야 버그 추적이 쉬워집니다. 즉, 예외는 프로그램을 멈추지 않되, 문제의 실마리는 명확히 남겨야 합니다.
이러한 예외 처리 방법과 원리를 이해하고 실전에 적용한다면, 파이썬으로 한층 더 견고하고 믿을 수 있는 프로그램을 구현할 수 있습니다.