콘텐츠로 이동

6단원 과제 정답: 예외 처리 & 파일 처리


문제 1. try / except 기본

① 결과: 5.0
② 완료
③ ---
④ 0으로 나눌 수 없습니다.
⑤ 완료

해설

safe_divide(10, 2): 1. result = 10 / 2 = 5.0 — 오류 없음 2. else 블록 실행 → 결과: 5.0 3. finally 블록 → 완료

safe_divide(10, 0): 1. 10 / 0ZeroDivisionError 2. except 블록 → 0으로 나눌 수 없습니다. 3. finally 블록은 항상 실행 → 완료


문제 2. 다중 except

① 20.0
② 숫자 아님
③ 0 불가
④ 25.0

해설

호출 흐름 결과
convert("5") int("5")=5, 100/5=20.0 20.0
convert("hello") int("hello")ValueError "숫자 아님"
convert("0") int("0")=0, 100/0ZeroDivisionError "0 불가"
convert("4") int("4")=4, 100/4=25.0 25.0

문제 3. raise 사용

① 85
② 오류: 점수 범위 초과: 110
③ 70
④ 오류: 점수 범위 초과: -5

해설

raise ValueError(...) — 조건이 맞으면 직접 예외를 발생시킵니다. for 루프 안의 try/except가 각 호출마다 예외를 잡아 처리합니다.


문제 4. 파일 쓰기 모드 차이

실행 2 직후 log.txt 내용 ②:

첫 번째
두 번째
세 번째

최종 log.txt 내용 ①:

초기화

해설

실행 모드 결과
실행 1 "w" 새 파일 생성 → "첫 번째\n두 번째\n"
실행 2 "a" 기존 내용 유지 + "세 번째\n" 추가
실행 3 "w" 기존 내용 삭제 후 "초기화\n"만 남음

문제 5. 파일 읽기

① 3
② apple
③ cherry
④ 1: apple
⑤ 2: banana
⑥ 3: cherry

해설

readlines()는 각 줄을 원소로 가지는 리스트를 반환합니다. "apple\n", "banana\n", "cherry\n" — 각 줄에 \n 포함. strip()으로 \n 제거 후 출력합니다.


문제 6. FileNotFoundError 처리

① hello
② b.txt: 없음
③ world
④ 완료

해설

각 파일 열기를 독립적인 try/except로 처리하므로, b.txt에서 예외가 발생해도 루프가 계속됩니다. 루프 종료 후 "완료" 출력.


문제 7. 예외 처리 흐름 완전 분석

① 결과: 5
② 성공
③ x=2 완료
④ ---
⑤ ValueError: zero!
⑥ x=0 완료
⑦ ---
⑧ 결과: -5
⑨ 성공
⑩ x=-2 완료

실제 출력은 9줄 + "---" 2줄 = 11줄이지만, 문제는 9개 빈칸 제공.

해설

test(2): 10 // 2 = 5 → 출력 결과: 5else 블록 성공finally x=2 완료 test(0): x==0raise ValueError("zero!")except ValueErrorValueError: zero!finally x=0 완료 (else는 실행 안 됨) test(-2): 10 // -2 = -5결과: -5else 블록 성공finally x=-2 완료


문제 8. 번호 매기기 파일 출력

def print_numbered(filename):
    try:
        with open(filename, "r", encoding="utf-8") as f:
            lines = f.readlines()
        for i, line in enumerate(lines):
            print(f"{i+1}: {line.strip()}")
    except FileNotFoundError:
        print("파일을 찾을 수 없습니다.")

빈칸 정답

빈칸 위치 정답 이유
with ______ open 파일 열기 함수
f.______() readlines 줄 단위 리스트로 읽기
______(lines) enumerate 인덱스 + 값 동시 반환
line.______() strip 줄 끝 \n 제거

문제 9. 안전한 정수 입력 함수

def input_int(prompt):
    while True:
        try:
            value = int(input(prompt))
            return value
        except ValueError:
            print("숫자만 입력하세요.")

빈칸 정답

빈칸 위치 정답
______: (try) try
______ ValueError: except

문제 10. 단어 빈도 파일 분석

freq = {}
try:
    with open("words.txt", "r", encoding="utf-8") as f:
        content = f.read()

    words = content.split()

    for word in words:
        if word in freq:
            freq[word] += 1
        else:
            freq[word] = 1

    for word, count in sorted(freq.items(), key=lambda x: x[1], reverse=True):
        print(f"{word}: {count}")

except FileNotFoundError:
    print("파일 없음")

빈칸 정답

빈칸 위치 정답 이유
f.______() read 파일 전체를 문자열로 읽기
content.______() split 공백 기준으로 단어 분리
if word ______ freq in 딕셔너리에 키 존재 여부 확인
key=______ lambda x: x[1] 값(빈도)을 기준으로 정렬