2015-08-26 81 views
1

我想我的python安裝中有一個bug。下面的代碼:Python隨機更改數據類型

i = 0 
while i < 100: 
    for key in F1Test.keys(): 

    mTest = np.append(mTest, float(F1Test[key])) 
    i = i+1 

會達一隨機數,運行它崩潰給下面的錯誤之前:

ValueError: could not convert string to float: error 

F1Test具有以下值:

In [123]: F1Test 
Out[123]: 
{'AltoFlute': 0.75, 
'AltoSax': 1.0, 
'Bass': 0.9111111111111111, 
'BassClarinet': 0.8, 
'BassFlute': 0.8695652173913043, 
'BassTrombone': 'error', 
'Bassoon': 0.7692307692307692, 
'BbClarinet': 0.9230769230769231, 
'Cello': 0.8695652173913043, 
'EbClarinet': 0.9411764705882353, 
'Flute': 0.8695652173913044, 
'Guitar': 1.0, 
'Horn': 1.0, 
'Oboe': 0.8750000000000001, 
'Piano': 0.993103448275862, 
'SopSax': 0.9230769230769231, 
'TenorTrombone': 0.923076923076923, 
'Trumpet': 1.0, 
'Tuba': 0.888888888888889, 
'Viola': 0.8735632183908046, 
'Violin': 0.8974358974358975} 

我發現它在一個更大的代碼中,並減少到這種形式。顯然,每50次一次,它會將字典中的值作爲字符串而不是浮點數來讀取。我使用的是ipython 1.2.1,python 2.7.6和Ubuntu 14.04。

我對解決方法不感興趣(我知道我可以測試類型並完成它),我只是覺得這很有趣,我期待着理解這個問題。

+4

它看起來像是試圖將BassTrombone的'錯誤'轉換爲浮動和失敗。 – Ryan

+1

是錯誤等於'錯誤'的'F1Test [key]'的值嗎? – dm03514

+0

你是對的。在較大的代碼中,F1Test會在每個循環中重新初始化,並且偶爾會發生錯誤。我的眼睛沒有抓住繩子。我猜是時候散步了。謝謝! –

回答

2

F1Test[key]會從你的字典的每個值,然後你施放浮動與float(F1Test[key]),你在你的字典"error"你試圖強制轉換爲浮動所以很明顯會報錯有一個字符串。沒有辦法讓代碼無誤地運行,除非使用try/except或其他方法來捕獲無法轉換爲浮點數的輸入。

在另一方面所有的值吧"error"已經彩車所以鑄造是多餘的,你也不需要調用.keys遍歷字典鍵,for key in dict就足夠了,如果你還只是想要的值,用dict.values()

+1

我知道,我爲了得到一個異常而鑄造了這些值。在較大的代碼中,異常來自數組上調用的平均方法。感謝您閱讀我的問題並指出了這一點。我被阻止了。 –

+1

不用擔心,可能是休息時間;) –