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("파일 없음")