본문 바로가기
카테고리 없음

파이썬에서 ValueError: could not convert string to float 해결 가이드

by vibespace 2025. 4. 15.

ValueError: could not convert string to float 오류란?

파이썬에서 숫자가 아닌 문자열을 float() 함수로 변환하려 할 때, 다음과 같은 오류가 발생할 수 있습니다:


ValueError: could not convert string to float: 'abc'

이 오류는 문자열이 부동소수점(float) 숫자 형식에 맞지 않을 경우 발생합니다. 사용자 입력, 파일 데이터, 외부 API 등에서 입력값을 처리할 때 흔히 볼 수 있는 오류입니다.

오류 발생의 대표적인 원인

1. 문자열에 숫자가 아닌 문자가 포함된 경우


value = float("abc")

문자열이 숫자 형식이 아니므로 오류가 발생합니다.

2. 공백이나 특수 문자가 포함된 경우


value = float(" 123.45\n")

이 경우에는 정상적으로 변환됩니다. 그러나 아래와 같이 쉼표가 포함되어 있다면?


value = float("1,234.56")

ValueError가 발생합니다. 쉼표는 파이썬의 숫자 포맷이 아니기 때문입니다.

3. 빈 문자열을 변환할 경우


value = float("")

아무 값도 없는 문자열은 float로 변환할 수 없어 오류가 발생합니다.

해결 방법 1: 숫자인지 확인하고 변환하기

float()를 사용하기 전에 문자열이 숫자인지 사전 검사를 하면 오류를 방지할 수 있습니다.


def safe_to_float(s):
    try:
        return float(s)
    except ValueError:
        return None

print(safe_to_float("123.45"))   # 123.45
print(safe_to_float("hello"))    # None

이처럼 try-except 구문을 사용하면 프로그램이 중단되지 않고 예외 상황을 부드럽게 처리할 수 있습니다.

해결 방법 2: 문자열 전처리

실제 데이터에서는 숫자 형식에 쉼표, 통화 기호, 공백 등이 섞여 있을 수 있습니다. 이런 경우 문자열을 float로 변환하기 전에 정리가 필요합니다.


def clean_and_convert(s):
    s = s.strip().replace(",", "")
    try:
        return float(s)
    except ValueError:
        return None

print(clean_and_convert(" 1,234.56 "))  # 1234.56

strip(): 공백 제거 replace(",", ""): 쉼표 제거 이렇게 하면 " 1,234.56 " 같은 문자열도 문제 없이 변환할 수 있습니다.

해결 방법 3: 빈 문자열 처리

입력값이 빈 문자열일 경우 기본값을 설정


s = ""
value = float(s) if s else 0.0
print(value)  # 0.0

실전 예제: CSV 파일에서 숫자 추출

파일에서 데이터를 읽을 때, 숫자처럼 보이지만 실제로는 문자열로 저장된 값들이 많습니다. 다음은 CSV 데이터를 처리하는 예제입니다.


import csv

def parse_prices(filename):
    prices = []
    with open(filename, newline='') as f:
        reader = csv.DictReader(f)
        for row in reader:
            price_str = row['price'].strip().replace(",", "")
            try:
                price = float(price_str)
                prices.append(price)
            except ValueError:
                continue  # 변환 안 되는 행은 건너뜀
    return prices

이처럼 파일에서 데이터를 불러올 때는 문자열 정리 및 예외 처리가 필수입니다.

디버깅 팁: 문제 발생 시 확인할 것

  • type()으로 입력값의 타입 확인
  • repr()로 문자열 내부 상태(공백, 줄바꿈 등) 출력
  • strip(), replace()를 이용해 문자 정리
  • try-except로 예외 처리

s = "1,200.50"
print(repr(s))  # '1,200.50'
print(float(s.replace(",", "")))  # 1200.5

정리: float 변환 오류는 사소한 문자열 문제에서 시작됩니다

ValueError: could not convert string to float 오류는 대부분 문자열에 숫자가 아닌 문자가 포함되어 있거나, 형식이 맞지 않아 발생
정확한 타입 확인과 문자열 전처리, 예외 처리를 통해 이러한 문제는 충분히 예방할 수 있습니다. 특히 사용자 입력, API, CSV 등 다양한 입력 소스를 다룰 때는 안전한 변환 로직을 미리 준비해두는 것이 중요합니다.

앞으로 숫자 변환 오류에 당황하지 말고, 오늘 배운 방법으로 똑똑하게 대응해보세요!