Python随机改变数据类型

标签 python python-2.7 dictionary types ipython

我认为我的 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 次它就会从字典中读取值作为字符串而不是 float 。我正在使用 ipython 1.2.1、python 2.7.6 和 Ubuntu 14.04。

我对解决方法不感兴趣(我知道我可以测试类型并完成它),我只是觉得这很有趣,并且我希望了解这个问题。

最佳答案

F1Test[key] 从字典中获取每个值,然后使用 float(F1Test[key]) 转换为 float ,字典中有一个字符串"error" 您尝试将其转换为 float ,因此显然它会出错。除非使用 try/except 或其他一些方法来捕获无法转换为 float 的输入,否则您不可能让代码在没有错误的情况下运行。

另一方面,所有值栏 "error" 已经是 float ,因此转换是多余的,您也不需要调用 .keys 来迭代字典键,for key in dict 就足够了,如果您只想要值,请使用 dict.values()

关于Python随机改变数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32229007/

相关文章:

python - Pygame 用鼠标移动球

python-2.7 - Pathos multiprocessing 无法调用类中的任何包和函数

python - 如何处理paramiko中的[Errno -2]?

python - 如何从 django.utils.safestring.SafeText 获取字符串

dictionary - 使用 clojure 将多行读取到记录中

python - 如何在python中使用datetime模块获取第一秒和最后一秒?

python - 仅安装依赖项 - setuptools

Python:从字典运行代码

python查找列表中多个数字之间的距离

Python,在字典中查找与规则匹配的组件