Преобразователь времени не работает, давая мне «не удалось преобразовать строку в плавающее» - PullRequest
0 голосов
/ 01 апреля 2020

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

tmp1 = t.split('.')[0]
tmp2 = tmp1.split(':')
if len(tmp2)>1:
    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp1[1])
if len(tmp2)>2:
    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp2[2])

print(t, tmp1, tmp2, seconds)

02:38.0 02:38.0 ['02', '38'] 9482.0
02:28:28 02:28:28 ['02', '28', '28'] 8908.0
02:10.21 02:10 ['02', '10'] 7802.0

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Не пытайтесь использовать вторую форму, если первая выполнена:

if len(tmp2)>2:
    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp2[2])
elif len(tmp2)>1:
    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp1[1])
1 голос
/ 01 апреля 2020

tmp1[1] - второй символ строки tmp1. Если это : или другой не-ди git, он не сможет преобразовать его в число с плавающей точкой.

Если вы введете 2:34.56, tmp[1] равно : когда вы запускаете

seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp1[1])

Скорее всего, вы собираетесь выполнить условие len(tmp2)>2, только если оно не выполняет другое условие. Одним из решений будет использование равных вместо больше.

if len(tmp2) == 2:
    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp1[1])    
elif len(tmp2) == 3:
    seconds = 60.0*60.0*float(tmp2[0])+60.0*float(tmp2[1])+float(tmp2[2])

Другой вариант - поменять условия (как это сделал @ Błotosmętek в своем ответе). В любом случае, вы должны использовать elif (иначе, если) вместо if для второго условия, чтобы второе условие не выполнялось, если выполнено первое условие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...