[python] 함수형 프로그래밍에서 에러 처리는 어떻게 이루어지나요?

함수형 프로그래밍에서는 에러 처리가 일반적인 명령형 프로그래밍과는 조금 다릅니다. 함수형 프로그래밍에서는 예외 처리를 통해 에러를 다루는 것이 흔히 사용되는 패턴입니다.

예외 처리는 “try-except” 문을 사용하여 구현할 수 있습니다. 일반적으로 함수형 프로그래밍에서는 예외를 “Either” 데이터 타입을 이용하여 처리합니다. “Either”는 두 가지 가능성 중 하나를 나타내는 타입으로, 예외가 발생하면 “Left” 값으로 결과를 반환하고, 정상적인 결과는 “Right” 값으로 반환하는 방식입니다.

예를 들어, 다음과 같은 함수가 있다고 가정해봅시다:

def divide(a, b):
    if b == 0:
        raise ValueError("Cannot divide by zero")

    return a / b

위 함수는 두 개의 숫자를 나누는 함수로, 만약 두 번째 인자가 0이라면 ValueError 예외를 발생시킵니다.

이 함수를 호출하는 코드에서는 try-except 문을 사용하여 예외를 처리할 수 있습니다:

try:
    result = divide(10, 0)
    print("Division result:", result)
except ValueError as e:
    print("Error occurred:", str(e))

위 코드에서는 divide 함수를 호출하고, 결과 값을 변수 result에 저장합니다. 그러나 만약 ValueError 예외가 발생한다면 except 블록이 실행되고 해당 예외를 처리합니다. 예외 객체의 내용은 str(e)를 통해 출력되어 사용자에게 보여집니다.

또는, 함수를 수정하여 Either 타입으로 예외를 처리해볼 수도 있습니다:

from typing import Union

def divide(a, b) -> Union[float, str]:
    if b == 0:
        return "Cannot divide by zero"

    return a / b

위의 예제에서는 divide 함수가 float 또는 str을 반환하는데, float는 정상적인 결과를 나타내고, str은 에러 메세지를 나타냅니다. 이렇게 함으로써 호출하는 쪽에서는 함수의 반환 값을 검사하여 어떠한 결과가 반환되었는지 확인할 수 있습니다.

함수형 프로그래밍에서 예외 처리는 이러한 방식으로 이루어집니다. 위의 패턴을 활용하여 에러를 처리하면 코드의 안정성을 향상시킬 수 있습니다.

참고 자료: