[파이썬] ValueError 예외 처리와 예제

소요 시간: 2분

프로그래밍을 하다 보면 다양한 예외 상황을 마주하게 됩니다. 이 예외들을 적절히 처리하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다. 파이썬에서는 이러한 예외를 다루기 위한 다양한 방법을 제공합니다. 그 중에서도 ValueError는 매우 자주 발생하는 예외 중 하나입니다. 이번 글에서는 ValueError가 무엇인지, 언제 발생하는지, 그리고 이를 어떻게 처리할 수 있는지 알아보겠습니다.


ValueError란?

ValueError는 함수가 적절한 타입의 인수를 받았지만, 그 값이 부적절할 때 발생하는 에러입니다. 예를 들어, 수학적인 연산에서 음수의 제곱근을 구하려고 할 때처럼 말입니다. 타입은 올바르지만 값이 문제인 경우에 이 에러가 발생합니다.


ValueError 발생 예제

먼저, math 모듈의 sqrt 메서드를 사용하여 숫자의 제곱근을 구하는 예제를 살펴보겠습니다.

import math

print(math.sqrt(9))

위의 코드를 실행하면 출력은 다음과 같습니다:

3.0

그러나, 음수를 입력하면 어떻게 될까요?

import math

print(math.sqrt(-9))

이 경우, 다음과 같은 에러가 발생합니다:

Traceback (most recent call last):
  File "", line 1, in 
ValueError: math domain error

음수는 제곱근을 구할 수 없는 값이므로 ValueError가 발생한 것입니다.

ValueError 예외 처리

이제 ValueError를 처리하는 방법을 알아보겠습니다. 사용자로부터 입력받은 값이 유효한지 확인하고, 그렇지 않다면 적절히 예외를 처리하는 코드를 작성해봅시다.

import math
x = int(input('Please enter a positive number:\n'))

try:
    print(f'Square Root of {x} is {math.sqrt(x)}')
except ValueError:
    print(f'You entered {x}, which is not a positive number.')

위의 코드에서는 사용자가 입력한 값이 음수인 경우 ValueError를 발생시키고, 이를 except 블록에서 처리하여 사용자에게 올바른 메시지를 출력합니다.

사용자 정의 함수에서의 예외 처리

파이썬에서는 사용자 정의 함수에서도 예외를 처리할 수 있습니다. 다음은 사용자가 입력한 값이 양수인지 확인하고, 그렇지 않으면 예외를 발생시키는 예제입니다.

def read_only_positive_number(x):
    if not isinstance(x, int):
        raise TypeError('Please enter a number.')
    if x <= 0:
        raise ValueError('Please enter a positive number.')
    print(x)

이 함수는 입력값이 정수가 아니거나 양수가 아닌 경우 예외를 발생시킵니다.


실용적인 활용 예제

실제 어플리케이션에서는 예외 처리가 매우 중요합니다. 예를 들어, 사용자의 이메일을 받아 사용자 객체를 생성하는 함수에서 이메일이 유효하지 않으면 ValueError를 발생시킬 수 있습니다.

def create_user(email, password):
    if not email:
        raise ValueError('User must have an email address.')
    # 추가 로직

이 함수는 이메일이 제공되지 않으면 ValueError를 발생시키고, 이를 통해 올바르지 않은 입력을 사전에 차단합니다.


결론

ValueError는 파이썬 프로그래밍에서 자주 마주치는 예외 중 하나입니다. 이 예외를 적절히 처리함으로써 프로그램의 안정성을 높이고, 사용자에게 유용한 피드백을 제공할 수 있습니다. 위에서 살펴본 예제들을 통해 ValueError의 발생 원인과 이를 처리하는 방법을 익히고, 실전에서 효과적으로 활용해 보시기 바랍니다.

파이썬 리스트