[파이썬] 일반적인 예외 처리 패턴

예외 처리는 프로그램에서 발생할 수 있는 오류를 다루는 중요한 부분입니다. Python은 강력한 예외 처리 기능을 제공하며, 이를 이용하여 프로그램의 안정성과 신뢰성을 높일 수 있습니다. 이 글에서는 일반적인 예외 처리 패턴을 살펴보고, Python에서 어떻게 사용하는지 알아보겠습니다.

1. try-except 문

가장 기본적인 예외 처리 방법은 try-except 문입니다. try 블록 안에서 오류가 발생할 수 있는 코드를 실행하고, 해당 오류가 발생하면 except 블록 안에 있는 코드가 실행됩니다. 이를 통해 프로그램이 중단되지 않고 계속 실행될 수 있게 됩니다.

try:
    # 예외가 발생할 수 있는 코드
    result = 10 / 0  # ZeroDivisionError 발생
except ZeroDivisionError:
    # ZeroDivisionError 예외 처리
    result = None

위 예제에서는 try 블록 내에서 10을 0으로 나누는 코드가 있습니다. 이는 ZeroDivisionError를 발생시킵니다. except 블록에서는 해당 예외를 처리하고, result 변수에 None 값을 대입합니다.

2. 다중 예외 처리

여러 개의 다른 예외를 처리해야하는 경우, 다중 예외 처리를 사용할 수 있습니다. 여러 개의 except 블록을 사용하여 각각 다른 예외에 대한 처리 방법을 지정할 수 있습니다.

try:
    # 예외가 발생할 수 있는 코드
    result = int('not_an_integer')  # ValueError 발생
except ValueError:
    # ValueError 예외 처리
    result = None
except TypeError:
    # TypeError 예외 처리
    result = None

위 예제에서는 try 블록 내에서 문자열을 정수로 변환하는 코드가 있습니다. 이는 ValueError를 발생시킵니다. except 블록은 각각 ValueError와 TypeError 예외에 대한 처리 방법을 제공합니다.

3. finally 블록

파일 또는 리소스와 같은 일부 자원은 항상 정리(clean-up)되어야 합니다. 이러한 경우에는 finally 블록을 사용하여 자원의 정리 작업을 수행할 수 있습니다. finally 블록은 어떤 경우에도 실행되며, try-except 블록 실행 후에 실행됩니다.

try:
    # 예외가 발생할 수 있는 코드
    file = open('myfile.txt', 'r')
    # 파일 읽기 작업
except IOError:
    # IOError 예외 처리
    print("파일을 열 수 없습니다.")
finally:
    # 항상 실행되는 코드
    file.close()  # 파일 닫기

위 예제에서는 try 블록 내에서 파일을 읽고자 시도합니다. IOError가 발생할 수 있으며, 이를 except 블록에서 처리하고 파일을 닫는 clean-up 작업을 finally 블록에서 수행합니다.

4. 예외 발생시키기

프로그램에서 직접 예외를 발생시킬 수도 있습니다. raise 키워드와 예외 클래스를 사용하여 예외를 발생시킬 수 있습니다.

try:
    # 특정 조건에서 예외 발생
    if condition:
        raise ValueError("잘못된 값입니다.")
except ValueError as e:
    # ValueError 예외 처리
    print("올바르지 않은 값입니다. 오류 메시지:", str(e))

위 예제에서는 특정 조건에서 ValueError 예외를 발생시키고, except 블록에서 해당 예외를 처리합니다. raise 문에는 예외에 대한 정보를 포함한 오류 메시지를 지정할 수 있습니다.

5. 사용자 정의 예외

Python에서는 기본적으로 제공되는 예외 외에도 사용자 정의 예외를 만들 수 있습니다. 이를 통해 프로그램의 동작에 따른 특정한 예외를 처리할 수 있습니다.

class CustomException(Exception):
    def __init__(self, message):
        self.message = message

try:
    # 특정 상황에서 사용자 정의 예외 발생
    if condition:
        raise CustomException("사용자 정의 예외 발생")
except CustomException as e:
    # 사용자 정의 예외 처리
    print("사용자 정의 예외가 발생했습니다. 오류 메시지:", e.message)

위 예제에서는 CustomException 클래스를 정의하고, 이를 상속받아 사용자 정의 예외를 만듭니다. raise 문을 사용하여 예외를 발생시키고, except 블록에서 해당 예외를 처리합니다.

결론

Python에서 제공하는 다양한 예외 처리 패턴을 이해하면, 프로그램의 안정성과 신뢰성을 높일 수 있습니다. try-except 문을 사용하여 예외를 처리하고, 다중 예외 처리 및 finally 블록을 사용하여 처리 방법을 구체화 할 수 있습니다. 또한, 직접 예외를 발생시켜 특정 상황을 처리하거나 사용자 정의 예외를 만들어 프로그램의 동작에 따른 예외를 처리할 수 있습니다.