Published on

6단계: 예외 처리와 파일 입출력

6-1. 예외 처리 기본 구조

try:
    x = int(input("숫자 입력: "))
    print(10 / x)
except ValueError:
    print("숫자가 아닙니다.")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
finally:
    print("항상 실행됨")

6-2. 여러 예외 처리

하나의 except에 여러 예외를 묶을 수도 있습니다.

try:
    ...
except (ValueError, TypeError):
    print("값 또는 타입 에러")

6-3. 예외 객체 사용

try:
    int("abc")
except ValueError as e:
    print("예외 내용:", e)

6-4. 사용자 정의 예외

class CustomError(Exception):
    pass

def validate(x):
    if x < 0:
        raise CustomError("음수는 허용되지 않습니다.")

6-5. 파일 열기 및 읽기

file = open("hello.txt", "r", encoding="utf-8")
content = file.read()
file.close()

6-6. 파일 쓰기/추가 모드

file = open("hello.txt", "w", encoding="utf-8")
file.write("안녕하세요")
file.close()
  • "w": 덮어쓰기
  • "a": 이어쓰기

6-7. with 문으로 안전하게 파일 처리

with open("hello.txt", "r", encoding="utf-8") as f:
    print(f.read())

파일을 자동으로 닫아주는 안전한 방식입니다.


6-8. 파일 줄 단위 읽기

with open("hello.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

요약

  • 예외는 try-except-finally 구문으로 처리
  • 특정 예외를 지정하거나 사용자 정의 예외를 만들 수 있음
  • 파일 입출력은 open/write/read로 수행
  • with 문을 사용하면 파일을 자동으로 닫을 수 있음

심화학습

Q1. try-finally만 사용할 때의 특징은?
A1. 예외가 발생하더라도 finally 블록은 항상 실행되어 자원 정리에 유용합니다.


Q2. 파일 인코딩을 지정하지 않으면 어떤 문제가 발생할 수 있나요?
A2. 시스템 기본 인코딩과 다를 경우 한글 깨짐, UnicodeDecodeError 등이 발생할 수 있습니다.


Q3. 사용자 정의 예외를 사용하는 이유는 무엇인가요?
A3. 도메인 특화된 오류 상황을 명확하게 표현하고, 예외 처리 코드를 구분하기 쉽게 하기 위해 사용합니다.