예외 처리 & 파일 I/O
`try/except/else/finally` · `raise` · `with open(...) as f` 컨텍스트 매니저.
예외 처리의 실행 순서(try → except → else → finally)와 파일 모드(`r/w/a/rb/wb`)가 단답·코드 추적으로 출제된다.
Python 예외 처리는 `try/except/else/finally` 4블록으로 구성된다. try는 위험 코드, except는 오류 처리, else는 오류가 없을 때만, finally는 항상 실행된다.
except는 구체적인 예외부터 나열. 상위 예외(Exception)를 먼저 잡으면 아래 except가 절대 실행되지 않는다.
실행 순서 — try 성공 시: try → else → finally. try 실패 시: try → (해당 except) → finally. finally는 예외가 발생해도 반드시 실행된다.
`with` 블록을 벗어나면 파일이 자동으로 닫힌다(컨텍스트 매니저). `close()`를 잊어도 안전하다.
| 모드 | 의미 | 파일 존재 | 쓰기 위치 |
|---|---|---|---|
| 'r' | 읽기 (기본) | 있어야 함 | - |
| 'w' | 쓰기 (덮어쓰기) | 없으면 생성 | 처음부터 |
| 'a' | 이어쓰기 (append) | 없으면 생성 | 끝에 |
| 'r+' | 읽기+쓰기 | 있어야 함 | 처음부터 |
| 'rb'/'wb' | 바이너리 모드 | - | - |
예외 발생 — `raise ValueError("메시지")` 로 직접 예외를 던질 수 있다. 사용자 정의 예외는 `class MyError(Exception): pass` 형태로 만든다.
다음 Python 코드의 출력은?
try:
x = int("abc")
except ValueError:
print("값 오류")
except Exception:
print("일반 오류")
finally:
print("끝")다음 Python 코드의 출력은?
def divide(a, b):
try:
return a / b
except ZeroDivisionError:
return -1
finally:
print("finally")
print(divide(10, 2))
print(divide(10, 0))Python의 `try` 블록이 오류 없이 정상 종료된 경우에만 실행되는 블록은?
Python에서 파일을 열 때 이어쓰기(append) 모드는 어떤 문자로 지정하는가?
`with open(...)` 구문으로 파일을 열면 블록을 빠져나갈 때 자동으로 파일이 닫힌다.