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

← python 3.14으로