我正在编写简短的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行有字符串值,并且以某种方式忘记了保存它,并一直认为我使用的是仅带整数和浮点数的较新版本。是。愚蠢的错误发生。我赚了很多。
答案 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]))