💻 코드를 작성하다가, 이런 코드를 본 적 있나요?
try:
# 실행할 코드
except Exception as e:
print('오류 발생:', e)
🙆♂️ "오류가 발생하면 이 코드가 알아서 다 잡아주니까 괜찮겠지?"
라고 생각할 수 있지만, 이 방법에는 큰 문제가 숨어 있어요! 이번 글에서는 왜 except Exception as e를 함부로 사용하면 안 되는지, 예외 처리의 기본 원칙을 다뤄볼게요! 🌟
❓ 왜 모든 예외를 한꺼번에 잡으면 안 될까요?
모든 예외를 Exception으로 잡으면, 오류의 종류에 상관없이 똑같이 처리하게 돼요.
이렇게 되면 예외 상황을 구체적으로 파악하기 어려워지고, 코드의 유지보수성이 떨어지게 됩니다. 예를 들어, 사용자가 잘못된 데이터를 입력했는지, 연산에서 문제가 발생했는지 등을 구체적으로 알기 힘들어요.
🔍 예외 처리의 계층 구조를 알면 더 이해가 쉬워요!
Python에서 모든 예외는 **BaseException**을 최상위 클래스로 가지고, 그 아래 **Exception**이 있고, 그 아래 다양한 예외들이 계층적으로 구성돼요. 이렇게 예외의 종류에 따라 더 구체적이고 다양한 예외가 나뉘어져 있습니다.
print(BaseException.__subclasses__()) # 기본적인 예외 종류
print(Exception.__subclasses__()) # 다양한 예외 종류
예외 처리의 계층 구조 예시:
- ArithmeticError
- FloatingPointError, OverflowError, ZeroDivisionError 등
- LookupError
- IndexError, KeyError 등
💡 구체적인 예외별로 처리하면 문제를 더 쉽게 이해하고 해결할 수 있겠죠?
🖥 이제 코드로 직접 확인해 볼까요?
아래 코드는 숫자를 입력받아 나누기 연산을 수행하는 예시인데요, 잘못된 입력에 대비한 구체적인 예외 처리가 추가돼 있어요:
try:
a = float(input('숫자를 입력하세요: '))
b = float(input('또 다른 숫자를 입력하세요: '))
x = a / b
print(f'결과는: {x}')
except ValueError:
print('😅 숫자로 입력해주세요!')
except ZeroDivisionError:
print('🚫 0으로 나눌 수 없습니다!!')
except Exception as e:
print(f'알 수 없는 오류 발생: {e}')
이렇게 각 상황에 맞는 예외를 처리하면, 프로그램이 예상치 못한 오류에 더 유연하게 대응할 수 있어요. 🙌
💬 같은 방식으로 처리해야 하는 여러 예외가 있다면?
특정 상황에서는 여러 예외를 한꺼번에 처리해야 할 때도 있어요. 이럴 때는 () 안에 예외들을 나열해 동일하게 처리할 수 있습니다:
try:
# 실행할 코드
except (TypeError, ValueError) as e:
print('타입이나 값 관련 오류 발생:', e)
except ZeroDivisionError:
print('0으로 나눌 수 없습니다!')
except Exception as e:
print(f'기타 오류 발생: {e}')
이 방식은 코드를 더욱 간결하고 명확하게 만들어 줍니다! 📌
📌 마무리
예외 처리는 예상 가능한 오류를 최대한 구체적으로 처리하는 것이 중요합니다. 모든 예외를 except Exception as e로 한 번에 처리하는 방법은 코드를 어렵게 만들고 문제 파악을 복잡하게 만드니, 상황에 맞게 각 예외를 구분해서 처리해 보세요!
다음 코딩에 도움이 되었기를 바라며! 🚀
'프로그래밍 언어(Programming Languages) > 파이썬(Python)' 카테고리의 다른 글
[Jupyter Notebook 주피터 노트북] ✨잘 몰랐던 Jupyter Notebook의 10가지 기능! Part 2✨ (8) | 2024.11.06 |
---|---|
[Python 파이썬] ✨ Python 타입 검사, 이제 Mypy로 간편하게! ✨ (1) | 2024.11.05 |
[Jupyter Notebook 주피터 노트북] ✨ 터미널에서 Jupyter Notebook 시작하기: 초보자도 따라 할 수 있는 완벽한 가이드 ✨ (1) | 2024.11.05 |
[Jupyter Notebook 주피터 노트북] ✨잘 몰랐던 Jupyter Notebook의 10가지 기능! Part 1✨ (1) | 2024.11.05 |
[파이썬 Python] 최고로 효율적인 Python 프로젝트를 빠르게 설정하는 방법 🐍 (1) | 2024.11.03 |