我想我的python安装中有一个bug。以下代码:
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。
我对解决方法不感兴趣(我知道我可以测试类型并完成它),我发现这很有趣,我希望了解这个问题。
答案 0 :(得分:2)
F1Test[key]
从你的dict获取每个值,然后你使用float(F1Test[key])
转换为浮动,你在字典"error"
中有一个字符串,你尝试将其转换为浮点数,所以很明显它会错误。除非使用try/except
或其他方法来捕获无法转换为浮点数的输入,否则您无法在没有错误的情况下运行代码。
另一方面,所有值"error"
都已浮动,因此转换是多余的,您也无需调用.keys
来迭代dict键,for key in dict
就足够了,如果您只想使用值dict.values()
。