ValueError: could not convert string to float的解决方法
问题描述
最近用python写了一个小算法,读取.txt文件中的数字(数字是用空格隔开的)后,读取进来的数字是strng(字符串),尝试用循环把list里面的字符串转换为float的时候出现了这个问题:
ValueError: could not convert string to float
字面意思:数值错误:无法把字符串转换为浮点数
再翻译一下:就是说你想转换为浮点数的字符串中有的字符串转换不了,即不是数字
当时出的问题我没有截图,于是我自创了一遍错误供大家比对,看看是不是同样的问题
print(float('A'))
Traceback (most recent call last):
File "main.py", line 2, in <module>
print(float('A'))
ValueError: could not convert string to float: A
ValueError: could not convert string to float: A
说明’A’这个字符串是不能转换为float的,可以自己检查一下错误提示,排查一下错误(但很有可能找不到,因为错误根本不是那个地方,我记得当时我的错误显示的是‘.’),也可能是我比较菜,大佬轻喷。
解决过程
我仔细看了看我的数据,也把它们打印出来看了看,也没发现里面有别的字符,于是在网上查了很多相关的帖子(包括CSDN,stack overflow之类的),下面我大概总结了几个解决方法,大概率解决你的问题。
解决方法
检查数据
首先看看你的数据中是不是有一些不太容易发现的字符
比如你把\t(Tab)
看成了空格
,导致分割出现问题,可以通过打印来查看这些字符,然后可以通过str.replace(',','')
把各种字符替换成''
(这里把','替换为'')
来进行替换清除,然后再进行下一步。
暴力去除首尾各种字符
首先这个错误大概率是因为某些看不见的字符造成的,所以可以先尝试暴力去除这些字符,这里使用str.strip()
,可以尝试的有str.strip("\n")
,str.strip("\t")
,str.strip("\"")
(去除"
)来移除字符串头部和尾部指定的字符,()
里什么都不填就是去除首尾空格。
去除首尾字符后,再进行数据分割
line = line.split(" ")
括号内是两个数据之间的分隔符
尽量减少步骤(玄学)
这个方法比较玄学,但是我确实通过这个方法解决了问题
lines = f.readlines()
for line in lines:
line = line.strip("\n")
line = line.split(" ")
line = [float(x) for x in line]
new_line = [float(x) for x in new_line]
这种写法尽量减少了出现问题的可能性,尝试这种写法有可能解决你的问题。
更新中
微薄之力,希望可以解决你的问题
PEACE~~
更多推荐
所有评论(0)