이번 글에서는 파이썬 입문자들이 프로그램을 작성하다 보면 마주하게 되는 에러에 대해 이를 관리하고 대응하는 방법에 대해 정리하고자 합니다. 즉, 파이썬에서의 에러와 예외 처리에 대한 기본 개념을 이해하고, 실용적인 예시 코드를 통해 스스로 예외 처리를 학습해 볼 수 있도록 작성해 보겠습니다.
파이썬 에러와 예외 처리
- 프로그램을 실행하는 도중에 발생할 수 있는 예기치 못한 상황을 에러(Error)라고 합니다. 에러는 프로그램의 실행을 중단시키고, 예외(Exception)를 발생시킵니다.
- 예외는 에러에 대한 정보를 담고 있으며, 이를 적절히 처리하면 프로그램이 비정상적으로 종료되는 것을 막을 수 있습니다.
- 예외 처리( Exception Handling)는 프로그램 실행 중 발생할 수 있는 예외 상황을 미리 예측하고, 그에 대한 적절한 대응 방법을 코드에 작성하는 것을 말합니다. 이를 통해 프로그램이 예기치 못한 상황에서도 안전하게 실행될 수 있도록 합니다.
try와 except 구문
파이썬에서 예외 처리는 `try-except` 문을 사용합니다.
- 기본 구조는 다음과 같습니다
try:
# 예외가 발생할 수 있는 코드
except 예외종류1:
# 예외종류1이 발생했을 때 실행할 코드
except 예외종류2:
# 예외종류2가 발생했을 때 실행할 코드
else:
# 예외가 발생하지 않았을 때 실행할 코드
finally:
# 예외 발생 여부와 상관없이 항상 실행할 코드
- 코드 예시: 파일 열기
try:
file = open("없는 파일.txt", "r")
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
else:
print("파일을 성공적으로 열었습니다.")
file.close()
이 예시에서는 `FileNotFoundError` 예외가 발생하면 "파일을 찾을 수 없습니다."라는 메시지를 출력합니다. 예외가 발생하지 않으면 "파일을 성공적으로 열었습니다."라는 메시지를 출력합니다.
1) 예외 발생시키기
프로그래머가 직접 예외를 발생시킬 수도 있습니다. `raise` 키워드를 사용하면 됩니다.
- 코드 예시: 나이 검증
def check_age(age):
if age < 0:
raise ValueError("나이는 0보다 작을 수 없습니다.")
elif age > 120:
raise ValueError("나이가 120보다 클 수는 없습니다.")
else:
print(f"당신의 나이는 {age}살입니다.")
try:
check_age(-5)
except ValueError as e:
print(e)
이 예시에서는 `check_age` 함수가 나이를 검증합니다. 나이가 0보다 작거나 120보다 크면 `ValueError`를 발생시킵니다. 이렇게 프로그래머가 직접 예외를 발생시켜 코드의 논리적 오류를 방지할 수 있습니다.
2) 예외 상속
파이썬에서는 예외도 클래스이므로 상속이 가능합니다. 직접 예외 클래스를 정의하고 기존 예외 클래스를 상속받을 수 있습니다.
- 코드 예시: 사용자 정의 예외
class InvalidValueError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return f"{self.value}는 유효한 값이 아닙니다."
def calculate(x, y):
if x < 0 or y < 0:
raise InvalidValueError(x if x < 0 else y)
return x + y
try:
result = calculate(-5, 10)
print(result)
except InvalidValueError as e:
print(e)
이 예시에서는 `InvalidValueError`라는 사용자 정의 예외 클래스를 만들었습니다. `calculate` 함수에서 음수 값이 들어오면 이 예외를 발생시킵니다. 사용자 정의 예외를 만들어서 프로그램의 예외 처리를 더욱 세밀하게 제어할 수 있습니다.
3) 예외 처리 팁
- 예외 처리는 프로그램의 안정성을 높이지만, 과도하게 사용하면 코드가 지저분해질 수 있습니다. 적절한 수준에서 사용하는 것이 좋습니다.
- 예외 메시지는 가능한 한 구체적으로 작성하여 디버깅에 도움이 되도록 합니다.
- 예외 처리 블록 안에서는 최소한의 코드만 작성하는 것이 좋습니다. 불필요한 코드가 있으면 예외 발생 시 실행 속도가 느려질 수 있습니다.
- 예외 처리 블록에서 다른 예외가 발생할 수 있음을 고려합니다. 중첩된 예외 처리 구조를 사용할 수 있습니다.
- 예외 처리를 하더라도 프로그램이 정상적으로 종료되도록 합니다. 예를 들어, 열린 파일은 반드시 닫아야 합니다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬 함수형 프로그래밍과 람다 표현식 고계 함수와 실무 예제 - 고급 Python #1 (0) | 2024.12.17 |
---|---|
파이썬 입문자를 위한 웹 스크래핑, BeautifulSoup, Requests 라이브러리 - Python 기초 #15 (0) | 2024.05.27 |
파이썬 데코레이터 가이드: 함수 래핑, 로깅, 캐싱 및 타임아웃 활용법 - Python 기초 #13 (0) | 2024.05.24 |
Python 상속 코드 재사용성 극대화를 위한 객체 지향 프로그래밍 가이드 - Python 기초 #12 (0) | 2024.05.23 |
객체 지향 프로그래밍의 핵심, 파이썬 메서드 이해하기 - Python 기초 #11 (0) | 2024.05.22 |