개요
이번 강좌에서는 파이썬 프로그램 실행 중 발생할 수 있는 오류, 즉 예외(Exception)를 효과적으로 처리하는 방법을 알아보겠습니다. 예외 처리는 프로그램이 예기치 못한 상황에서도 중단되지 않고 정상적으로 동작하도록 하는 중요한 기법입니다. 이를 통해 오류 발생 시 사용자에게 명확한 안내 메시지를 제공하고, 코드의 안정성과 신뢰성을 높일 수 있습니다. 이번 강좌에서는 기본적인 try-except 구조부터 finally와 else의 활용, 그리고 사용자 정의 예외 처리 방법까지 설명드리겠습니다.
예외의 개념과 필요성
프로그래밍 중에는 잘못된 입력, 파일 접근 문제, 0으로 나누기 등 다양한 상황에서 오류가 발생할 수 있습니다. 이러한 오류를 예외라고 하며, 예외가 발생하면 파이썬 인터프리터는 기본적으로 프로그램을 종료시킵니다. 그러나 예외 처리를 통해 오류 상황을 미리 예측하고 적절하게 대응하면, 프로그램이 갑자기 중단되지 않고 계속 실행되도록 할 수 있습니다. 예외 처리는 특히 사용자 입력이나 외부 리소스와 상호작용하는 경우에 필수적으로 적용해야 할 중요한 기술입니다.
try-except 기본 구조
파이썬에서 예외 처리는 try 블록에 예외가 발생할 가능성이 있는 코드를 작성하고, except 블록에서 해당 예외를 처리하는 방식으로 이루어집니다.
예를 들어, 두 수를 나누는 과정에서 0으로 나누는 오류(ZeroDivisionError)가 발생할 수 있는데, 이를 아래와 같이 처리할 수 있습니다.
예제 코드:
try:
a = 10
b = 0 # 0으로 나누면 ZeroDivisionError 발생
result = a / b
print("나눗셈 결과:", result)
except ZeroDivisionError:
print("오류: 0으로 나눌 수 없습니다.")
실행 결과:
오류: 0으로 나눌 수 없습니다.
이처럼 try-except 구문을 사용하면 예외 상황에서도 프로그램이 안전하게 종료되지 않고, 오류 메시지를 통해 문제를 알 수 있습니다.
finally와 else의 활용
try 블록에서 예외가 발생하더라도 반드시 실행되어야 하는 코드는 finally 블록에 작성할 수 있습니다. 이는 파일 닫기, 리소스 해제 등 정리 작업에 유용합니다. 또한, 예외가 발생하지 않은 경우에만 실행하고자 하는 코드는 else 블록에 작성할 수 있습니다.
예제 코드:
try:
num = int(input("숫자를 입력하세요: "))
except ValueError:
print("유효하지 않은 입력입니다. 숫자를 입력해 주세요.")
else:
print("입력한 숫자는", num, "입니다.")
finally:
print("프로그램 종료 전 항상 실행되는 finally 블록입니다.")
실행 결과 (예시 1, 올바른 숫자 입력):
숫자를 입력하세요: 5
입력한 숫자는 5 입니다.
프로그램 종료 전 항상 실행되는 finally 블록입니다.
실행 결과 (예시 2, 잘못된 입력):
숫자를 입력하세요: abc
유효하지 않은 입력입니다. 숫자를 입력해 주세요.
프로그램 종료 전 항상 실행되는 finally 블록입니다.
finally 블록은 예외 발생 여부와 상관없이 항상 실행되므로, 리소스 정리와 같은 작업에 매우 유용합니다.
사용자 정의 예외 처리
파이썬에서는 내장 예외 외에도, 개발자가 직접 예외 클래스를 정의하여 특정 상황에 맞는 예외를 발생시키고 처리할 수 있습니다. 사용자 정의 예외 클래스는 보통 내장 Exception 클래스를 상속받아 작성하며, 이를 통해 더욱 명확하고 구체적인 오류 처리가 가능합니다.
예제 코드:
# 사용자 정의 예외 클래스 생성
class NegativeNumberError(Exception):
"""음수 입력에 대해 발생시키는 사용자 정의 예외"""
pass
def check_positive(number):
if number < 0:
# 음수일 경우 사용자 정의 예외를 발생시킵니다.
raise NegativeNumberError("음수는 허용되지 않습니다.")
else:
print("입력한 숫자는 양수입니다:", number)
# 사용자 정의 예외 처리 예제
try:
num = int(input("숫자를 입력하세요: "))
check_positive(num)
except NegativeNumberError as e:
print("예외 발생:", e)
except ValueError:
print("유효하지 않은 입력입니다. 숫자를 입력해 주세요.")
실행 결과 (예시 1, 양수 입력):
숫자를 입력하세요: 10
입력한 숫자는 양수입니다: 10
실행 결과 (예시 2, 음수 입력):
숫자를 입력하세요: -5
예외 발생: 음수는 허용되지 않습니다.
이처럼 사용자 정의 예외를 사용하면, 특정 조건에 따른 오류를 보다 세밀하게 처리할 수 있습니다.
정리
- 예외의 개념: 예외는 실행 중 발생하는 오류를 의미하며, 적절한 처리 없이 방치하면 프로그램이 중단됩니다.
- try-except 구조: try 블록에 예외 발생 가능 코드를 작성하고, except 블록에서 해당 예외를 처리하여 프로그램의 안정성을 유지합니다.
- finally와 else: finally 블록은 예외 발생 여부와 관계없이 항상 실행되며, else 블록은 예외가 발생하지 않을 때 실행됩니다.
- 사용자 정의 예외: 내장 예외 외에도 개발자가 직접 예외 클래스를 정의하여 특정 상황에 맞는 오류 처리를 구현할 수 있습니다.
'개발 > Python' 카테고리의 다른 글
[Python 파이썬] 13. 고급 문법: 리스트, 람다 (0) | 2025.02.16 |
---|---|
[Python 파이썬] 12. 객체 지향 프로그래밍 (OOP) (0) | 2025.02.15 |
[Python 파이썬] 10. 파일 입출력 (0) | 2025.02.13 |
[Python 파이썬] 9. 모듈과 패키지 (0) | 2025.02.12 |
[Python 파이썬] 8. 함수의 이해와 활용 (0) | 2025.02.11 |