더북(TheBook)

finally 블록

예외를 전달하고 싶지만, 예외가 발생해도 정리 코드를 실행하고 싶을 때 try/finally를 사용하면 된다. try/finally의 일반적인 사용 예 중 하나는 파일 핸들러를 제대로 종료하는 작업이다(Better way 43 “재사용 가능한 try/finally 동작을 만들려면 contextlibwith 문을 고려하자”에서 또 다른 접근법을 확인할 수 있다).

handle = open(‘/tmp/random_data.txt’) # IOError가 일어날 수 있음

try:

data = handle.read() # UnicodeDecodeError가 일어날 수 있음

finally:

handle.close()       # try: 이후에 항상 실행됨

 

read 메서드에서 발생한 예외는 항상 호출 코드까지 전달되며, handleclose 메서드 또한 finally 블록에서 실행되는 것이 보장된다. 파일이 없을 때 일어나는 IOError처럼, 파일을 열 때 일어나는 예외는 finally 블록에서 처리하지 않아야 하므로 try 블록 앞에서 open을 호출해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.