파이썬에서 ValueError는 함수가 올바른 자료형의 값을 전달받았지만, 그 값 자체가 유효하지 않을 때 발생하는 예외입니다.
대표적인 예로 int() 함수에 숫자로 변환할 수 없는 문자열을 넘기는 경우를 들 수 있습니다. 문자열이라는 자료형은 맞지만 내용이 정수로 변환될 수 없기 때문에 ValueError가 발생합니다.
이런 예외는 try-except 문을 사용해 프로그램이 비정상적으로 종료되지 않도록 처리할 수 있습니다. 아래 코드는 예외를 잡아내고, 어떤 종류의 예외인지 확인하는 방법을 보여줍니다.
예제 코드
import sys
try:
n = int('magnolia')
except Exception as e:
print(e)
print(sys.exc_info()[0])
실행 결과
invalid literal for int() with base 10: 'magnolia'
<class 'ValueError'>
특정 예외만 골라서 처리하기
Exception을 사용하면 모든 종류의 예외를 한꺼번에 잡을 수 있지만, 실무에서는 발생 가능한 예외를 명시적으로 지정하는 것이 더 안전하고 가독성이 좋습니다. ValueError만 처리하려면 다음과 같이 작성합니다.
try:
n = int('magnolia')
except ValueError as e:
print(f"값 변환 오류 발생: {e}")
이렇게 하면 ValueError가 발생했을 때만 except 블록이 실행되며, 다른 종류의 예외(예: TypeError)는 별도로 처리하거나 그대로 전파할 수 있습니다. 예상하지 못한 오류까지 조용히 삼키는 버그를 예방하는 데 도움이 됩니다.