콘텐츠로 이동

Chapter 28: 디버깅 - 버그 찾고 해결하기

🎯 이 장에서 배우는 것

  • [ ] 오류 메시지를 읽고 원인을 파악할 수 있다
  • [ ] print()로 버그를 찾아 해결할 수 있다

⏱️ 예상 학습 시간: 약 15분


📚 핵심 개념

개념: 디버깅(Debugging)

비유로 시작할게요!

디버깅은 의사가 환자를 진찰하는 것과 같아요. 증상(오류 메시지)을 보고, 원인을 찾아, 치료(수정)하는 과정이죠! 🩺

정확한 정의:

💡 디버깅 = 코드에서 버그(오류)를 찾아 고치는 과정

자주 만나는 오류 3가지:

오류 이름 의미 예시
SyntaxError 문법 오류 print("안녕" ← 괄호 빠짐
NameError 없는 이름 print(naem) ← 오타
TypeError 타입 오류 "나이: " + 20 ← 숫자+문자

🔨 따라하기

Step 1: 오류 메시지 읽기

버그가 있는 코드:

name = "철수"
print(naem)  # 오타!

오류 메시지:

NameError: name 'naem' is not defined
         ↑
    "naem이 정의 안 됨" = 오타!

💡 핵심: 오류 메시지가 줄 번호원인을 알려줘요!


Step 2: print()로 디버깅하기

문제 있는 코드:

total = 0
for i in range(5):
    total = i  # 버그: += 해야 함!

print(total)  # 예상: 10, 실제: 4

print()로 중간값 확인:

total = 0
for i in range(5):
    total = i
    print(f"i={i}, total={total}")  # 👈 추가!

print(total)

실행 결과:

i=0, total=0
i=1, total=1
i=2, total=2
i=3, total=3
i=4, total=4
4

🔍 발견! total이 누적 안 되고 덮어쓰기 됨 → total += i로 수정!


📝 전체 코드 (수정 완료)

# 수정된 올바른 코드
total = 0
for i in range(5):
    total += i  # ✅ 수정: = → +=

print(total)  # 결과: 10

⚠️ 주의할 점

디버깅 3단계 기억하세요:

flowchart LR A["1️⃣ 오류 메시지<br>읽기"] --> B["2️⃣ print()로<br>값 확인"] --> C["3️⃣ 원인 찾아<br>수정"] style A fill:#ffebee style B fill:#fff3e0 style C fill:#e8f5e9

✅ 점검하기

  1. NameError가 나타났다면 무엇을 확인해야 할까요?
정답 확인 변수명에 오타가 없는지, 변수를 먼저 정의했는지 확인해요!
  1. print() 디버깅은 언제 사용하나요?
정답 확인 코드가 실행되지만 결과가 예상과 다를 때, 중간값을 확인하려고 사용해요!

🔗 다음 장 미리보기

오류를 잘 처리하게 되었네요! 👏 다음 장에서는 모듈 가져오기로 파이썬의 강력한 기능들을 활용해볼 거예요!