콘텐츠로 이동

6단원 과제 (예외 처리 & 파일 처리)

이름: ____________

  • 출력 예측: 소스 코드를 보고 실행 결과를 예측하세요.
  • 빈칸 채우기: ______ 빈칸을 채워 프로그램을 완성하세요.

문제 1. try / except 기본 (출력 예측)

소스 코드

def safe_divide(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        print("0으로 나눌 수 없습니다.")
        return None
    else:
        print(f"결과: {result}")
        return result
    finally:
        print("완료")

safe_divide(10, 2)
print("---")
safe_divide(10, 0)

실행 결과

①

②

③

④

⑤

문제 2. 다중 except (출력 예측)

소스 코드

def convert(value):
    try:
        n = int(value)
        return 100 / n
    except ValueError:
        return "숫자 아님"
    except ZeroDivisionError:
        return "0 불가"

print(convert("5"))
print(convert("hello"))
print(convert("0"))
print(convert("4"))

실행 결과

①

②

③

④

문제 3. raise 사용 (출력 예측)

소스 코드

def get_score(score):
    if score < 0 or score > 100:
        raise ValueError(f"점수 범위 초과: {score}")
    return score

scores = [85, 110, 70, -5]
for s in scores:
    try:
        print(get_score(s))
    except ValueError as e:
        print(f"오류: {e}")

실행 결과

①

②

③

④

문제 4. 파일 쓰기 모드 차이 (출력 예측)

다음 코드를 순서대로 모두 실행했을 때, log.txt의 최종 내용을 예측하세요.

소스 코드

# 실행 1
with open("log.txt", "w", encoding="utf-8") as f:
    f.write("첫 번째\n")
    f.write("두 번째\n")

# 실행 2
with open("log.txt", "a", encoding="utf-8") as f:
    f.write("세 번째\n")

# 실행 3
with open("log.txt", "w", encoding="utf-8") as f:
    f.write("초기화\n")

log.txt의 최종 내용:

Q: 실행 2 직후 log.txt의 내용은?

문제 5. 파일 읽기 (출력 예측)

data.txt 파일의 내용이 아래와 같다고 가정합니다.

apple
banana
cherry

소스 코드

with open("data.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

print(len(lines))
print(lines[0].strip())
print(lines[-1].strip())

for i, line in enumerate(lines):
    print(f"{i+1}: {line.strip()}")

실행 결과

①

②

③

④

⑤

⑥

문제 6. FileNotFoundError 처리 (출력 예측)

소스 코드

filenames = ["a.txt", "b.txt", "c.txt"]

for name in filenames:
    try:
        with open(name, "r") as f:
            print(f.read().strip())
    except FileNotFoundError:
        print(f"{name}: 없음")

print("완료")

a.txt에는 "hello", b.txt는 존재하지 않음, c.txt에는 "world"가 저장되어 있다고 가정합니다.

실행 결과

①

②

③

④

문제 7. 예외 처리 흐름 완전 분석 (출력 예측)

소스 코드

def test(x):
    try:
        if x == 0:
            raise ValueError("zero!")
        result = 10 // x
        print(f"결과: {result}")
    except ValueError as e:
        print(f"ValueError: {e}")
    except ZeroDivisionError:
        print("ZeroDivisionError")
    else:
        print("성공")
    finally:
        print(f"x={x} 완료")

test(2)
print("---")
test(0)
print("---")
test(-2)

실행 결과

①

②

③

④

⑤

⑥

⑦

⑧

⑨

문제 8. 번호 매기기 파일 출력 (빈칸 채우기)

파일의 각 줄을 번호와 함께 출력하는 함수를 완성하세요.

실행 예시

1: apple
2: banana
3: cherry

소스 코드

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

print_numbered("fruits.txt")

문제 9. 안전한 정수 입력 함수 (빈칸 채우기)

유효한 정수가 입력될 때까지 반복하는 함수를 완성하세요.

실행 예시

숫자 입력: hello
숫자만 입력하세요.
숫자 입력: 3.5
숫자만 입력하세요.
숫자 입력: 42
입력값: 42

소스 코드

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

n = input_int("숫자 입력: ")
print(f"입력값: {n}")

문제 10. 단어 빈도 파일 분석 (빈칸 채우기)

파일에서 단어 빈도를 계산하는 프로그램을 완성하세요.

words.txt 내용:

apple banana apple cherry banana apple

실행 예시

apple: 3
banana: 2
cherry: 1

소스 코드

freq = {}

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

    words = content.______()

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

    for word, count in sorted(freq.items(), key=______, reverse=True):
        print(f"{word}: {count}")

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