try-finally 절이란?
지금까지 try 문은 대부분 except 절과 함께 사용되어 왔습니다. 하지만 try 문에는 except 절 대신 finally 절을 붙여 사용할 수도 있습니다. finally 절은 예외가 발생하든 발생하지 않든 어떤 경우에도 반드시 실행되어야 하기 때문에 '정리(clean-up) 절' 또는 '종료(termination) 절'이라고도 부릅니다.
즉, try 블록 안에서 예외가 발생했는지 여부와 상관없이 finally 절은 항상 실행됩니다. 이러한 특성 덕분에 파일 닫기, 데이터베이스 연결 해제처럼 반드시 수행해야 하는 마무리 작업을 처리할 때 finally 절이 널리 활용됩니다.
finally 절의 주요 특징
- try 블록에는 except 절 없이 finally 절만 단독으로 사용할 수 있습니다.
- finally 블록의 코드는 예외 발생 여부와 무관하게 항상 실행됩니다.
- 예외가 발생하면 finally 블록이 먼저 실행된 뒤 예외가 호출자에게 전달됩니다.
- finally 절은 else 절과 함께 사용하지 않는 것이 좋습니다.
예제 코드
다음은 try-finally 구조를 활용한 기본 예제입니다. 파일을 열고 내용을 작성한 후, finally 블록에서 파일을 반드시 닫아줍니다.
try:
foo = open('test.txt', 'w')
foo.write("It's a test file to verify try-finally in exception handling!!")
print('try block executed')
finally:
foo.close()
print('finally block executed')
실행 결과
try block executed
finally block executed
위 예제에서 try 블록의 파일 쓰기 작업 도중 오류가 발생하더라도, finally 블록에 있는 foo.close()는 반드시 실행됩니다. 따라서 예외 상황에서도 파일이 안전하게 닫히며, 리소스 누수를 예방할 수 있습니다.
참고로 실무에서는 파일을 다룰 때 with 문을 사용하는 것이 더 권장됩니다. with 문은 블록이 끝나는 시점에 파일을 자동으로 닫아주기 때문에, try-finally로 직접 정리 코드를 작성하는 번거로움 없이 깔끔하고 안전한 리소스 관리가 가능합니다.