학습 목표
이번 강의에서는 파이썬에서 예외 처리의 개념을 배우고, 오류를 처리하는 방법을 익힐 것입니다. 이를 통해 프로그램의 안정성을 높이고, 예상치 못한 상황에 보다 유연하게 대처할 수 있는 능력을 기를 수 있습니다.
개념 설명
예외 처리는 프로그램 실행 중 발생할 수 있는 오류를 관리하기 위한 방법입니다. 파이썬에서 예외 처리는 'try', 'except', 'finally', 'raise' 키워드를 사용하여 구현합니다. 'try' 블록 내에서 실행할 코드가 작성되며, 이 코드에서 예외가 발생하면 'except' 블록이 실행됩니다. 'finally' 블록은 예외 발생 여부와 관계없이 항상 실행되는 블록으로, 파일 닫기와 같은 자원 관리에 유용합니다. 'raise'는 의도적으로 예외를 발생시키는 데 사용됩니다.
예제 코드
# 두 수의 나눗셈을 수행하는 함수
def divide_numbers(num1, num2):
"""두 수를 나누는 함수"""
try:
result = num1 / num2
except ZeroDivisionError: # 0으로 나눌 때 발생하는 예외
return "오류: 0으로 나눌 수 없습니다."
except TypeError: # 잘못된 데이터 타입 (정수, 실수가 아닐 때)
return "오류: 숫자만 입력할 수 있습니다."
else: # 예외가 발생하지 않을 때 실행
return result
finally:
print("나눗셈 작업이 종료되었습니다.") # 항상 실행
# 사용 예제
print(divide_numbers(10, 2)) # 정상적인 나눗셈
print(divide_numbers(10, 0)) # 0으로 나누기
print(divide_numbers(10, "a")) # 잘못된 타입
코드 설명
위 코드는 두 수를 나누는 함수를 정의하고, 그 과정에서 발생할 수 있는 오류를 처리하는 예제입니다.
- 사용자가 두 숫자를 입력했을 때, 'try' 블록에서 나누기 작업을 수행합니다.
- 'ZeroDivisionError' 예외를 처리하여 0으로 나눌 경우 사용자에게 오류 메시지를 반환합니다.
- 'TypeError' 예외를 처리하여 잘못된 데이터 타입이 들어오는 경우에도 오류 메시지를 반환합니다.
- 예외가 발생하지 않을 경우, 나눗셈 결과가 반환됩니다.
- 'finally' 블록은 항상 실행되어 "나눗셈 작업이 종료되었습니다."라는 메시지를 출력합니다.
연습 문제
1. 두 개의 숫자를 입력받아 그 합을 구하는 프로그램을 작성하되, 숫자가 아닌 경우와 빈 입력에 대한 예외 처리를 추가해 보세요.
2. 사용자로부터 파일 이름을 입력받아 해당 파일을 열고, 파일이 존재하지 않는 경우와 읽을 수 없는 파일에 대한 예외 처리를 구현해 보세요.
연습 문제 해답
# 1번 문제: 두 수의 합을 구하는 프로그램
def add_numbers():
try:
num1 = float(input("첫 번째 숫자를 입력하세요: ")) # 실수형으로 변환
num2 = float(input("두 번째 숫자를 입력하세요: ")) # 실수형으로 변환
return num1 + num2
except ValueError: # 숫자가 아닐 때 발생하는 예외
return "오류: 숫자를 입력해야 합니다."
except Exception as e: # 기타 예외 처리
return f"오류: {str(e)}"
print("두 수의 합:", add_numbers()) # 결과 출력
# 2번 문제: 파일 열기 프로그램
def read_file():
filename = input("읽을 파일의 이름을 입력하세요: ")
try:
with open(filename, 'r') as file:
contents = file.read()
print(contents)
except FileNotFoundError: # 파일이 존재하지 않을 때
return "오류: 파일을 찾을 수 없습니다."
except IOError: # 읽는 중의 입출력 오류
return "오류: 파일을 읽는 데 문제가 발생했습니다."
finally:
print("파일 읽기 작업이 종료되었습니다.")
read_file() # 파일 읽기 함수 호출
### 설명
- **예외 처리 구현**: 함수 내부에서 `try`, `except`, 및 `finally`를 사용하여 코드의 안전성을 높였습니다.
- 첫 번째 연습 문제는 사용자 입력에 대한 예외를 다루고, 두 번째 연습 문제는 파일 입출력에 따른 오류 처리를 포함합니다.
- 이러한 양식은 프로그램의 오류를 효과적으로 관리하고, 사용자에게 의미 있는 피드백을 제공하는 데 매우 유용합니다.
0 댓글