无法将列表中的字符串解析为浮点数,得到ValueError

时间:2019-03-29 12:14:08

标签: python list parsing

我正在编写简短的pygame脚本,我需要从.cfg文件中解析值,但是我对python不太熟悉,并且遇到ValueError,也不知道为什么它无法解析字符串。

我尝试编写一种方法来接收字符串并将其转换为int,如果失败则将其转换为float却没有用。

代码如下:

def _file_read(self):
        with open(os.path.join(sys.path[0], "planets.cfg")) as config:
            lines = [line.replace(';', '').replace('{', '').replace('}', '').split() for line in config]
            for j in range(len(lines)):
                self.name.append(lines[j][0])
                self.radius.append(float(lines[j][1]))
                self.distance.append(float(lines[j][2]))
                self.speed.append(float(lines[j][3]))
                self.color.append(lines[j][4])

这是planets.cfg文件中的内容,不要管这些值,它们是为测试目的而组成的。

Earth {123; 321; 0.005; (0,255,0)}
Mars {432; 234; 0.004; (255,0,0)}

我需要有一个可以传递给数学公式的浮点数,但ValueError喜欢将浮点数放得更多。

任何想法如何处理?我将非常感谢您提供任何帮助或解释为什么会发生此错误:)

哦,这是它输出的错误:

  File "C:/Users/Jakub/PycharmProjects/untitled/kruznice.py", line 35 in _file_read
  self.radius.append(float(lines[j][1])) ValueError: could not convert   string to float: 'radius'

编辑:添加了错误消息,是的,我是一个非常分散的人。

编辑#2(解决方案):不久之后,我找到了解决方案,它基本上与代码错误无关。我在planets.cfg文件的第2行有字符串值,并且以某种方式忘记了保存它,并一直认为我使用的是仅带整数和浮点数的较新版本。是。愚蠢的错误发生。我赚了很多。

1 个答案:

答案 0 :(得分:1)

错误来自self.color.append(float(lines[j][4])),您正在尝试将元组转换为float

使用ast模块将其转换为元组

例如:

from ast import literal_eval

def _file_read(self):
    with open(os.path.join(sys.path[0], "planets.cfg")) as config:
        lines = [line.replace(';', '').replace('{', '').replace('}', '').split() for line in config]
        for j in lines:
            self.name.append(j[0])
            self.radius.append(float(j[1]))
            self.distance.append(float(j[2]))
            self.speed.append(float(j[3]))
            self.color.append(literal_eval(j[4]))