https://docs.python.org/3/tutorial/errors.html#defining-clean-up-actions
흐름:
- try 실행 →
- 예외가 나면 except(있다면) → finally → 예외 재전파.
- 예외 없으면 else(있다면) → finally → 반환/종료.
실전에서는 파일/소켓/락 같은 외부 자원 해제, 로그 남기기 등에 finally를 사용한다.
finally 사용할땐 break, continue, return을 사용하는 것을 피해야 한다.
예외가 발생하지 않거나
def f():
try:
1/0
finally:
return "덮였다" # ZeroDivisionError가 사라지고 이 값이 반환됨
print(f()) # "덮였다"반환값을 덮어씌우는 결과가 발생되기 때문
def g():
try:
return 1
finally:
return 2 # try의 반환 1을 덮고 2를 반환
print(g()) # 2