2016-08-23 185 views
0

將字符串轉換爲浮點數時出現了一些奇怪的事情。無法將字符串轉換爲浮點數:...有時

所以,當我正好使用下面的代碼寫入:

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

它停止短,應該有比這更約30行,而這些都是錯誤的計算。

功能是:

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() 

的錯誤是:

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

奇怪的是,當我註釋掉其他爲前循環,其結果是:

[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], 

此外,當我使用枚舉而不是zip(並進行適當的更改)時,它可以工作。我已經在第五個項目中檢查了這兩個列表中的任何不尋常的東西,因爲這是它掛起的地方,但是這兩個列表中都沒有什麼奇怪的。既然它枚舉工作正常,我現在就這樣做。但我一般都是Python /編程的新手,並且想知道究竟是什麼導致了這一點。

UPDATE本來應該包括這第一次。

#  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() 

打印...(正確)

[1468436874000, 2.82644376127], 

[1468528803000, 2.86702735915], 

[1468688596000, 2.8546107764], 

[1468871365000, 2.8546107764], 

[1468871996000, 2.8546107764], 

[1468919656000, 2.85383420662], 

etc... 

回答

0

調試在你的代碼打印的avgpriceavgsqft值。你得到一些string,因爲它的價值不能轉換爲浮動

+0

我試過了,並沒有看到任何奇怪的周圍的第4至第5項。這是否能解釋爲什麼它不能以這種方式工作? –

+0

代碼正在打印的最後一個'avgprice'和'avgsqft'值是什麼? –

+0

嗯。在循環印刷中打印avgprice和avgsqft 3 1180.77 4 1171.82 1 1171.82 3 1171.82。 *錯誤*因此,基本上它會對價格的每個字符進行迭代,並在小數處得到一個錯誤,這就解釋了爲什麼它會打印一些錯誤的數字,然後停止。我不確定爲什麼當其他兩個循環被註釋掉時,它的工作原理是不同的。有任何想法嗎? –

相關問題