Python을 배워보자/8. 예외 처리

파이썬 예외 처리 finally 블록

_Blue_Sky_ 2024. 9. 25. 18:56
728x90
728x90

파이썬 예외 처리: finally 블록 심층 분석

파이썬 예외 처리는 프로그램 실행 중 예상치 못한 오류를 효과적으로 관리하고, 프로그램의 안정성을 높이는 데 필수적인 요소입니다. 이 중 finally 블록은 예외 발생 여부와 상관없이 항상 실행되어야 하는 코드를 담는 특별한 영역으로, 자원 해제와 같은 작업에 주로 사용됩니다.

finally 블록이란?

finally 블록은 try 블록과 함께 사용됩니다. try 블록 안에서 예외가 발생하면 except 블록이 실행되고, 그렇지 않으면 else 블록이 실행됩니다. 하지만 finally 블록은 예외 발생 여부와 상관없이 항상 실행됩니다. 즉, try 블록이 정상적으로 실행되든 예외가 발생하든, 또는 except 블록이나 else 블록이 실행되든 간에 finally 블록은 항상 마지막에 실행됩니다.

왜 finally 블록을 사용해야 할까요?

  • 자원 해제: 파일, 네트워크 연결, 데이터베이스 연결 등의 자원을 사용하는 경우, 예외가 발생하더라도 반드시 해제해야 합니다. finally 블록에 자원 해제 코드를 넣으면 예외 발생 여부와 상관없이 항상 자원이 해제되어 메모리 누수를 방지할 수 있습니다.
  • 정리 작업: 프로그램 실행 중 생성된 임시 파일 삭제, 로그 기록 등의 정리 작업을 수행할 때도 finally 블록이 유용합니다.
  • 항상 실행해야 하는 코드: 프로그램 종료 전에 반드시 실행해야 하는 코드가 있다면 finally 블록에 넣어두면 안전하게 실행할 수 있습니다.
728x90

finally 블록의 구문

try:
    # 예외가 발생할 수 있는 코드
except 예외 종류:
    # 예외 처리 코드
else:
    # 예외가 발생하지 않을 때 실행되는 코드
finally:
    # 항상 실행되는 코드

예시

 
try:
    f = open('data.txt', 'r')
    data = f.read()
    print(data)
except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
finally:
    if 'f' in locals():
        f.close()
        print("파일이 닫혔습니다.")

위 예시에서:

  • try 블록에서 파일을 열고 읽는 작업을 합니다.
  • 파일이 없으면 FileNotFoundError 예외가 발생하고 except 블록이 실행됩니다.
  • 파일이 정상적으로 열리고 읽히면 else 블록이 실행됩니다.
  • finally 블록에서는 파일이 열려 있었다면 반드시 닫는 작업을 수행합니다.

주의 사항

  • return 문과 finally: finally 블록은 return 문이 실행되기 전에 항상 실행됩니다.
  • 예외 재발생: finally 블록에서 새로운 예외가 발생하면 기존의 예외는 무시되고 새로운 예외가 처리됩니다.
  • 무한 루프: finally 블록 안에 무한 루프를 작성하면 프로그램이 종료되지 않을 수 있습니다.

결론

finally 블록은 파이썬 예외 처리에서 매우 중요한 역할을 합니다. 자원 해제, 정리 작업 등 예외 발생 여부와 상관없이 항상 수행해야 하는 코드를 안전하게 실행하기 위해 finally 블록을 적절하게 사용해야 합니다.

 

728x90
728x90