为什么python代码拒绝整数?

时间:2018-07-08 18:24:46

标签: python regex python-3.x

我写了一个代码

import re
inp=input("Please enter the file name ")
if len(inp)<1: inp = 'regex_sum_109744.txt'
fh=open(inp,'r')
sum=c=0
for i in fh:
    i=i.rstrip()
    s=re.findall('[0-9]+',i)
    for j in s:
        try:
            u=float(s[c])
        except:
            #print("the thing is",j)
            continue
        sum=sum+u
        #print("**********","the number is ",u,"the sum is ",sum,"************")
        c=c+1
    c=0
print(sum)

但是当我将[0-9]更改为[0-9。]时,输出开始拒绝整数

i have uploaded an image in which you can see that along with dot(.) the integers 3 and 4 are also rejected

有人可以解释一下为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

您的问题与以下事实有关:您正在尝试将s[c]转换为浮点数,但是如果无法完成,则不要增加ccontinue在到达c=c+1行之前)。这意味着在第一个匹配项转换失败后,您将继续为内循环的其余部分尝试相同的s[c],并继续失败。因此,您将永远不会匹配句号后在线上出现的数字。错误报告无济于事,因为它会打印j,并在循环运行时更新。

当您已经对s[c]列表中的值进行c=c+1循环时,我根本不清楚为什么要执行fors 。只需尝试转换j而不是s[c],它应该可以工作(然后可以从代码中完全删除c)。您也可以将c=c+1行的副本放在except块中,但我确实不建议这样做。确实,我建议您进一步缩小except的范围,以便仅处理ValueError异常,甚至使用更复杂的正则表达式来匹配文本中的句点,因此您根本不需要try / except