Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 예외를 올바르게 무시하는 방법 완벽 가이드

Python에서 예외를 무시하는 기본 방법

Python 코드를 작성하다 보면 특정 상황에서 발생하는 예외(Exception)를 의도적으로 무시해야 할 때가 있습니다. 이럴 때는 try 문과 pass 문을 조합하여 예외를 처리하지 않고 그냥 넘어갈 수 있습니다.

방법 1: except 절 사용

try:
    x, y = 7, 0
    z = x / y
except:
    pass

방법 2: except Exception 절 사용

try:
    x, y = 7, 0
    z = x / y
except Exception:
    pass

위 두 코드 모두 try 블록 안에서 발생한 예외를 우회하여, except 절에서 아무 작업도 수행하지 않고(pass) 프로그램이 계속 실행되도록 합니다.

두 방식의 차이점

두 코드의 핵심적인 차이는 예외를 잡아내는 범위에 있습니다.

  • 첫 번째 코드(맨 바깥의 except): KeyboardInterrupt, SystemExitexceptions.BaseException을 직접 상속받는 예외까지 모두 잡아냅니다.
  • 두 번째 코드(except Exception): 일반적인 예외만 잡아내므로, Ctrl+C 같은 시스템 종료 신호는 정상적으로 전달됩니다.

따라서 특별한 이유가 없다면 두 번째 방식인 except Exception을 사용하는 것이 권장됩니다. 맨 바깥의 except는 의도치 않게 프로그램 종료 신호까지 삼켜버릴 수 있기 때문입니다.

마지막으로 발생한 예외 정보 정리하기

Python에서는 마지막으로 발생한 예외가 내부적으로 기억되며, 예외 발생 구문과 관련된 일부 객체들이 다음 예외가 발생할 때까지 메모리에 유지될 수 있습니다. 단순히 pass만 하는 대신, 다음과 같이 예외 정보를 명시적으로 정리(clear)할 수 있습니다.

try:
    x, y = 7, 0
    z = x / y
except Exception:
    sys.exc_clear()

sys.exc_clear()는 마지막으로 발생한 예외 정보를 삭제하여, 불필요한 객체가 메모리에 남아 있는 것을 방지합니다.

Python 3 사용자를 위한 참고 사항

sys.exc_clear()는 Python 2 전용 함수로, Python 3에서는 제거되었습니다. Python 3에서는 except 블록이 끝나는 시점에 예외 정보가 자동으로 정리되므로 별도의 처리가 필요하지 않습니다. 따라서 Python 3 환경이라면 다음과 같이 간단하게 작성하면 됩니다.

try:
    x, y = 7, 0
    z = x / y
except ZeroDivisionError:
    pass

또한 가능하다면 모든 예외를 무시하기보다 ZeroDivisionError처럼 구체적인 예외 타입을 지정하는 것이 디버깅과 코드 유지보수 측면에서 훨씬 안전합니다.