레슨 6 / 9·20분
파일 처리와 예외 처리
파일 읽기와 쓰기
Python에서는 open() 함수로 파일을 열고, with 문을 사용하면 파일이 자동으로 닫힙니다. 텍스트와 바이너리 모드를 지원합니다.
python
# 파일 쓰기
with open("example.txt", "w", encoding="utf-8") as f:
f.write("첫 번째 줄\n")
f.write("두 번째 줄\n")
f.write("세 번째 줄\n")
# 파일 읽기 (전체)
with open("example.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
# 줄 단위 읽기
with open("example.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip()) # 줄바꿈 제거
# 파일에 이어쓰기
with open("example.txt", "a", encoding="utf-8") as f:
f.write("추가된 줄\n")CSV와 JSON 파일 다루기
python
import csv
import json
# CSV 쓰기
data = [
["이름", "나이", "도시"],
["김철수", 25, "서울"],
["이영희", 30, "부산"],
]
with open("data.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerows(data)
# CSV 읽기
with open("data.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["이름"], row["나이"])
# JSON 쓰기/읽기
config = {"theme": "dark", "font_size": 14, "lang": "ko"}
with open("config.json", "w", encoding="utf-8") as f:
json.dump(config, f, ensure_ascii=False, indent=2)
with open("config.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
print(loaded["theme"]) # dark예외 처리 (try / except)
예외 처리를 사용하면 프로그램이 오류로 멈추지 않고 적절히 대응할 수 있습니다. try / except / else / finally 구조를 사용합니다.
python
# 기본 예외 처리
try:
number = int(input("숫자를 입력하세요: "))
result = 100 / number
print("결과:", result)
except ValueError:
print("유효한 숫자가 아닙니다!")
except ZeroDivisionError:
print("0으로 나눌 수 없습니다!")
except Exception as e:
print("예상치 못한 오류:", e)
else:
print("오류 없이 실행됨")
finally:
print("항상 실행되는 블록")
# 커스텀 예외
class InvalidAgeError(Exception):
def __init__(self, age):
self.age = age
super().__init__("유효하지 않은 나이: " + str(age))
def set_age(age):
if age < 0 or age > 150:
raise InvalidAgeError(age)
return age
try:
set_age(200)
except InvalidAgeError as e:
print(e) # 유효하지 않은 나이: 200- •
try / except-- 예외를 잡아서 처리 - •
else-- 예외가 발생하지 않으면 실행 - •
finally-- 예외 여부와 관계없이 항상 실행 - •
raise-- 예외를 발생시킴 - •
with-- 컨텍스트 매니저, 리소스 자동 정리
💡
except Exception으로 모든 예외를 잡기보다는, 처리할 수 있는 구체적인 예외만 잡으세요. 디버깅이 쉬워집니다.