无法在Python中将字符串转换为int

时间:2013-06-14 21:22:27

标签: python arrays hash sum type-conversion

这个python片段出了什么问题:

for zhszam in pontok.keys():
    s = 0
    for p in pontok[zhszam]:
        if p.isdigit():
            s += int(p)
            print s
    pontok[zhszam] = s
return pontok

其中 pontok {1: ['10', ' 5', ' 3', ' 10', ' 7'], 2: ['10', ' 5', ' 3', ' 10']}。 它以某种方式给出了以下错误输出:

10
10
{1: 10, 2: 10}

虽然值应该是数字的总和。

提前致谢!

3 个答案:

答案 0 :(得分:5)

除第一个'10'之外的每个字符串都有一个前导空格,它不是数字。因此它根本没有被处理。

尝试:

for p in pontok[zhszam]:
    p = p.strip()
    # ...

答案 1 :(得分:2)

你不应该使用str.isdigit,它可以很容易地破解。最好使用int()的try-except块。

>>> dic = {1: ['10', ' 5', ' 3', ' 10', ' 7'], 2: ['10', ' 5', ' 3', ' 10']}
for k,v in dic.iteritems():
    s = 0
    for x in v:
        try:
            s += int(x)     #raises Error if the item is not a valid number
        except:              
            pass            #leave the item as it is if an error was thrown
    dic[k] = s 
...     
>>> dic
{1: 35, 2: 28}

答案 2 :(得分:1)

我宁愿发表评论,也不愿留下这个答案,但我还没有代表。这个问题将帮助您剥离这些前导空格:Python remove all whitespace in a string