Topic 2: try-except로 에러 처리하기 🛡️
🎯 학습 목표
에러가 발생해도 프로그램이 멈추지 않고 계속 실행되도록 만드는 방법을 배워요!
- try-except 구조 이해하기
- 다양한 에러 처리 방법 익히기
- 사용자 친화적인 프로그램 만들기
🤹 try-except: 에러를 잡아라!
try-except
는 에러가 발생할 수 있는 코드를 안전하게 실행하는 방법이에요. 마치 안전망을 설치하는 것과 같아요!
기본 구조
try:
# 에러가 발생할 수 있는 코드
위험한_코드()
except:
# 에러가 발생했을 때 실행할 코드
print("에러가 발생했어요!")
실제 예제로 배워보기
# 에러가 발생하는 코드
number = int(input("숫자를 입력하세요: "))
print(f"입력한 숫자는 {number}입니다")
만약 사용자가 “abc”를 입력하면 프로그램이 멈춰버려요! 😱
# try-except로 안전하게 처리하기
try:
number = int(input("숫자를 입력하세요: "))
print(f"입력한 숫자는 {number}입니다")
except:
print("숫자가 아닌 것을 입력했어요! 다시 시도해주세요.")
이제 에러가 발생해도 프로그램이 멈추지 않아요! 🎉
🎯 특정 에러만 잡기
모든 에러를 똑같이 처리하는 것보다, 에러 종류에 따라 다르게 처리하는 게 좋아요.
ValueError 처리하기
try:
age = int(input("나이를 입력하세요: "))
print(f"당신은 {age}살이군요!")
except ValueError:
print("나이는 숫자로 입력해주세요!")
여러 종류의 에러 처리하기
try:
numbers = [1, 2, 3]
index = int(input("인덱스를 입력하세요 (0-2): "))
result = numbers[index]
print(f"선택한 숫자: {result}")
except ValueError:
print("숫자를 입력해주세요!")
except IndexError:
print("0부터 2 사이의 숫자를 입력해주세요!")
🌟 else와 finally 활용하기
else: 에러가 없을 때만 실행
try:
number = int(input("숫자를 입력하세요: "))
except ValueError:
print("올바른 숫자가 아니에요!")
else:
# 에러가 발생하지 않았을 때만 실행
print(f"제곱: {number ** 2}")
finally: 무조건 실행
try:
file = open("data.txt", "r")
content = file.read()
except FileNotFoundError:
print("파일을 찾을 수 없어요!")
finally:
# 에러 발생 여부와 관계없이 항상 실행
print("프로그램을 종료합니다.")
# 파일이 열려있다면 닫기
if 'file' in locals():
file.close()
💪 실용적인 예제
나눗셈 계산기
def safe_divide():
try:
num1 = float(input("첫 번째 숫자: "))
num2 = float(input("두 번째 숫자: "))
result = num1 / num2
print(f"{num1} ÷ {num2} = {result}")
except ValueError:
print("숫자를 입력해주세요!")
except ZeroDivisionError:
print("0으로는 나눌 수 없어요!")
# 함수 실행
safe_divide()
메뉴 선택 프로그램
def show_menu():
menu = ["피자", "치킨", "햄버거", "김밥"]
print("=== 메뉴판 ===")
for i, item in enumerate(menu):
print(f"{i+1}. {item}")
try:
choice = int(input("메뉴 번호를 선택하세요: "))
selected = menu[choice - 1]
print(f"{selected}를 선택하셨습니다!")
except ValueError:
print("번호로 입력해주세요!")
except IndexError:
print("메뉴에 있는 번호를 선택해주세요!")
# 프로그램 실행
show_menu()
💡 퀴즈: try-except 이해도 체크
Q1. 다음 코드의 문제점은 무엇일까요?
try:
number = int(input("숫자 입력: "))
result = 10 / number
except:
print("에러 발생!")
정답: 모든 에러를 똑같이 처리하고 있어요!
- ValueError(문자 입력)와 ZeroDivisionError(0 입력)를 구분해서 처리하는 게 좋아요
- 사용자에게 더 정확한 안내를 줄 수 있어요
Q2. else는 언제 실행될까요?
try:
x = 5
y = 2
result = x / y
except ZeroDivisionError:
print("0으로 나눌 수 없어요!")
else:
print("계산 성공!")
정답: “계산 성공!”이 출력돼요!
- try 블록에서 에러가 발생하지 않았으므로 else 블록이 실행돼요
- else는 에러가 없을 때만 실행되는 코드를 넣는 곳이에요
✅ try-except 마스터 체크리스트
✅ try-except 마스터 체크리스트
🚀 다음 단계
이제 에러를 처리할 수 있게 되었어요! 다음에는 프로그램의 버그를 찾고 수정하는 디버깅 기술을 배워볼게요!
Last updated on