파이썬에서 except 절에 예외 타입을 명시하지 않으면, 발생하는 모든 종류의 예외를 일괄적으로 처리할 수 있습니다. 하지만 이러한 방식은 좋은 코딩 습관이 아니며, 실무에서도 권장되지 않습니다.
예제 코드
try:
print('foo' + 'qux' + 7)
except:
print('There is error')실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻게 됩니다.
There is error
예외를 지정하지 않는 except 절의 문제점
위와 같은 try-except 블록은 문자열과 숫자를 더하려 할 때 발생하는 TypeError뿐만 아니라, NameError, ValueError 등 프로그램에서 발생할 수 있는 모든 종류의 예외를 잡아냅니다.
겉보기에는 편리해 보이지만, 이 방식에는 치명적인 단점이 있습니다. 어떤 종류의 예외가 발생했는지 프로그래머가 알 수 없기 때문에, 코드의 오류 원인을 파악하고 디버깅하기가 매우 어려워집니다.
더 나은 대안
실무에서는 처리하고자 하는 예외를 구체적으로 명시하는 것이 좋습니다.
try:
print('foo' + 'qux' + 7)
except TypeError as e:
print(f'타입 오류가 발생했습니다: {e}')정말로 모든 예외를 잡아야 하는 상황이라면, 최소한 예외 객체를 받아 로그로 남기거나 출력하여 원인을 추적할 수 있도록 작성해야 합니다.
try:
risky_operation()
except Exception as e:
print(f'오류 발생: {type(e).__name__} - {e}')결론적으로, 예외 없이 사용하는 except 절은 모든 예외를 처리할 수 있다는 장점이 있지만, 디버깅과 유지보수 측면에서 심각한 문제를 일으킬 수 있으므로 가급적 구체적인 예외 타입을 지정하는 습관을 들이는 것이 바람직합니다.