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 등 다양한 입력 소스를 다룰 때는 안전한 변환 로직을 미리 준비해두는 것이 중요합니다.
앞으로 숫자 변환 오류에 당황하지 말고, 오늘 배운 방법으로 똑똑하게 대응해보세요!