Learning
레슨 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으로 모든 예외를 잡기보다는, 처리할 수 있는 구체적인 예외만 잡으세요. 디버깅이 쉬워집니다.