- 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. 도메인 특화된 오류 상황을 명확하게 표현하고, 예외 처리 코드를 구분하기 쉽게 하기 위해 사용합니다.