Невозможно разобрать строки из списка в float, получая ValueError - PullRequest
0 голосов
/ 29 марта 2019

Я пишу короткий скрипт pygame и мне нужно проанализировать значения из файла .cfg, но я не очень разбираюсь в python и получаю ValueError и понятия не имею, почему он не может проанализировать строку.

Я попытался написать метод, чтобы взять строку и преобразовать ее в целое число, если не удалось преобразовать ее в число с плавающей точкой, но это не сработало.

Вот код:

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 (Решение): Итак, через некоторое время я нашел решение, и оно в основном НИЧЕГО не связано с неправильным кодом. У меня были строковые значения в строке 2 в файле planets.cfg, и я почему-то забыл сохранить его, и постоянно думал, что использую более новую версию только с целыми числами и числами с плавающей запятой. Да. Бывают глупые ошибки. И я делаю их много.

1 Ответ

1 голос
/ 29 марта 2019

Ошибка от self.color.append(float(lines[j][4])) Вы пытаетесь преобразовать кортеж в число с плавающей точкой

Используйте модуль ast, чтобы преобразовать его в кортеж

Ex:

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]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...