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~~

猜你喜欢

转载自blog.csdn.net/weixin_35436966/article/details/105941671