2016-08-23 2 views
0

Ich habe einige seltsame Dinge passieren beim Konvertieren von Zeichenfolgen zu schwebt in einer Schleife.Konnte Zeichenfolge nicht in Gleitkomma konvertieren: ... Manchmal

Also, wenn ich den folgenden Code genau verwenden sie schreibt:

[1468436874000, 0.00254071495719], 
[1468528803000, 0.00341349353996], 
[1468688596000, 0.000853373384991], 
[1468871365000, 0.00256012015497], 

Es stutzt, sollte es als die etwa 30 Linien mehr sein und das sind die falschen Berechnungen.

Die Funktion ist:

def main(): 

minprice = pricelist('MIN') 
maxprice = pricelist('MAX') 
avgprice = pricelist('AVG') 
avgsqft = sqftlist() 
datelist = getdates() 
index = fileparser() 

with open('/home/andrew/Desktop/index3.htm', 'w') as file: 

    file.writelines(data[:index[0]]) 

    for date, minprice, maxprice in zip(datelist, minprice, maxprice): 
     file.writelines('[%s, %s, %s],\n' % (date, minprice, maxprice)) 

    file.writelines(data[index[1]:index[2]]) 

    for date, avgprice in zip(datelist, avgprice): 
     file.writelines('[%s, %s],\n' % (date, avgprice)) 

    file.writelines(data[index[3]:index[4]]) 

    for date, avgprice, avgsqft in zip(datelist, avgprice, avgsqft): 
     file.writelines('[%s, %s],\n' % (date, ((float(avgprice))/(float(avgsqft))))) 

    file.writelines(data[index[5]:]) 
    file.close() 

Der Fehler ist:

file.writelines('[%s, %s],\n' % (date, ((float(avgprice))/(float(avgsqft))))) 
ValueError: could not convert string to float: . 

Merkwürdig ist, dass, wenn ich für Schleifen, bevor es die anderen Kommentar aus, das Ergebnis ist:

[1468436874000, 2.82644376127], 
[1468528803000, 2.86702735915], 
[1468688596000, 2.8546107764], 
[1468871365000, 2.8546107764], 
[1468871996000, 2.8546107764], 
[1468919656000, 2.85383420662], 
[1469004050000, 2.85189704903], 
[1469116491000, 2.87361540168], 
[1469189815000, 2.86059636119], 
[1469276601000, 2.83694745621], 
[1469367041000, 2.83903252711], 
[1469547497000, 2.83848688853], 
[1469649630000, 2.83803033196], 
[1469736031000, 2.82327110329], 
[1469790030000, 2.82650020338], 
[1469876430000, 2.96552660866], 
[1470022624000, 2.93407180385], 

Außerdem, wenn ich enumerate statt zip verwende (und die entsprechenden Änderungen vornehme), funktioniert es. Ich habe beide Listen beim fünften Punkt auf etwas Ungewöhnliches untersucht, weil dort aufgelegt wird, aber in beiden Listen ist nichts Ungewöhnliches. Da es mit Enumerate funktioniert, werde ich das jetzt tun. Aber ich bin neu in Python/Programmierung im Allgemeinen und möchte verstehen, was genau das verursacht.

UPDATE Sollte dies das erste Mal, haben eingeschlossen.

#  file.writelines(data[:index[0]+1]) 
#  for date, minprice, maxprice in zip(datelist, minprice, maxprice): 
#   file.writelines('[%s, %s, %s],\n' % (date, minprice, maxprice)) 
#  file.writelines(data[index[1]:index[2]+1]) 
#  for date, avgprice in zip(datelist, avgprice): 
#   file.writelines('[%s, %s],\n' % (date, avgprice)) 
#  file.writelines(data[index[3]:index[4]+1]) 
#  time.sleep(1) 
for date, avgprice, avgsqft in zip(datelist, avgprice, avgsqft): 
    # file.writelines(
    print'[%s, %s],\n' % (date, ((float(avgprice))/(float(avgsqft)))) 
    # file.writelines(data[index[5]:]) 
    # file.close() 

druckt ... (richtig)

[1468436874000, 2.82644376127], 

[1468528803000, 2.86702735915], 

[1468688596000, 2.8546107764], 

[1468871365000, 2.8546107764], 

[1468871996000, 2.8546107764], 

[1468919656000, 2.85383420662], 

etc... 

Antwort

0

Debug durch die Werte von avgprice Druck und avgsqft in Ihrem Code. Sie erhalten einige string als Wert, die nicht in Float

+0

konvertiert werden kann Ich habe das versucht und habe nichts Ungewöhnliches um den 4.-5. Würde das erklären, warum es nur so nicht funktioniert? –

+0

Was sind die letzten 'avgprice'- und' avgsqft'-Werte, die Ihr Code druckt? –

+0

Hmm. Druck von Durchschnittspreis und Durchschnitt in der Schleife gedruckt 1180.77 4 1171.82 1 1171.82 3 1171.82. * FEHLER * Also im Grunde ist es für jedes Zeichen des Preises zu iterieren und einen Fehler bei der Dezimalzahl zu bekommen, was erklärt, warum es ein paar falsche Zahlen druckt und dann stoppt. Ich bin nicht sicher, warum das anders funktioniert, wenn die anderen beiden Schleifen auskommentiert sind. Irgendwelche Ideen? –

Verwandte Themen