Python 예외 처리: try, except 및 finally

예외 처리란 프로그래밍의 필수적인 부분이며, Python은 예외 처리를 위한 강력한 메커니즘을 제공합니다. Python에서 try, except, finally 블록은 예외를 포착하고 처리하는 데 사용되어 프로그램이 예기치 않게 충돌하지 않도록 합니다. 이 문서에서는 이러한 블록을 효과적으로 사용하여 Python 프로그램의 오류를 처리하는 방법을 살펴봅니다.

예외란 무엇인가?

예외는 프로그램 실행 중에 발생하는 오류입니다. 프로그램이 실행되기 전에 인터프리터가 잡는 구문 오류와 달리 예외는 프로그램이 실행되는 동안 발생합니다. 예를 들어 숫자를 0으로 나누거나 목록에 없는 인덱스에 액세스하면 예외가 발생합니다.

tryexcept의 기본 구조

try 블록은 예외를 발생시킬 수 있는 코드를 래핑하는 데 사용됩니다. 예외가 발생하면 프로그램은 except 블록으로 점프하여 오류를 처리합니다. 기본 구문은 다음과 같습니다.

try:
    # Code that might throw an exception
    risky_code()
except ExceptionType:
    # Code that runs if an exception occurs
    handle_exception()

이 구조에서는:

  • try: 이 블록에는 예외를 발생시킬 수 있는 코드가 들어 있습니다.
  • except: 이 블록은 try 블록에서 예외가 발생하면 실행됩니다. catch할 예외 유형을 지정할 수 있습니다.

여러 예외 처리

파이썬에서 여러 except 블록을 지정하여 여러 예외를 처리할 수 있습니다. 이는 다른 예외를 다르게 처리하고 싶을 때 유용합니다. 다음은 예입니다.

try:
    x = int(input("Enter a number: "))
    result = 10 / x
except ValueError:
    print("Invalid input. Please enter a valid number.")
except ZeroDivisionError:
    print("You cannot divide by zero.")

이 예에서:

  • 사용자가 정수가 아닌 값을 입력하면 ValueError가 발생합니다.
  • 사용자가 0을 입력하면 ZeroDivisionError가 발생합니다.

finally 블록 사용

finally 블록은 예외가 발생했는지 여부와 관계없이 실행해야 하는 코드를 실행하는 데 사용됩니다. 이는 종종 파일을 닫거나 리소스를 해제하는 것과 같은 정리 작업에 사용됩니다. 작동 방식은 다음과 같습니다.

try:
    file = open("example.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("The file was not found.")
finally:
    file.close()
    print("File closed.")

이 예에서 finally 블록은 예외가 발생하든 그렇지 않든 파일이 닫히도록 보장합니다.

else 블록 사용

파이썬은 또한 try 블록에서 예외가 발생하지 않으면 실행되는 선택적 else 블록을 허용합니다. else 블록은 모든 except 블록 뒤에 와야 합니다.

try:
    x = int(input("Enter a number: "))
    result = 10 / x
except ZeroDivisionError:
    print("You cannot divide by zero.")
else:
    print("Division successful:", result)
finally:
    print("Execution complete.")

이 코드에서는:

  • 나누기가 성공하면 else 블록이 실행됩니다.
  • finally 블록은 결과와 관계없이 실행됩니다.

예외 처리를 위한 모범 사례

  • 버그를 숨기지 않으려면 일반적인 Exception 대신 구체적인 예외를 항상 포착하세요.
  • 파일, 네트워크 연결 등의 리소스를 해제하려면 finally를 사용합니다.
  • 흐름 제어에 예외를 사용하지 마십시오. 예외는 예외적인 경우에만 사용해야 합니다.
  • 디버깅과 오류 이해를 돕기 위해 예외를 잡을 때 의미 있는 메시지를 제공합니다.

결론

Python의 try, except, finally 블록은 예외와 오류를 우아하게 처리하기 위한 강력한 도구를 제공합니다. 이를 효과적으로 사용하는 방법을 이해하면 더욱 견고하고 유지 관리하기 쉬운 Python 애플리케이션을 구축하는 데 도움이 될 수 있습니다. 예외를 적절히 처리하고 일반적인 함정을 피하기 위한 모범 사례를 따르세요.