首页 > 解决方案 > 为什么python代码拒绝整数?

问题描述

我写了一个代码

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.] 时,输出开始拒绝整数

我上传了一张图片,您可以在其中看到与 dot(.) 一起,整数 3 和 4 也被拒绝

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

标签: pythonregexpython-3.x

解决方案


您的问题与您尝试转换s[c]为浮点数的事实有关,但c如果无法完成,您永远不会增加(continue在您到达 c=c+1线路之前)。这意味着在第一场比赛转换失败后,您将继续s[c]对内循环的其余部分进行相同的尝试,并继续失败。因此,您永远不会匹配在一段时间后出现在一行上的数字。错误报告对您没有帮助,因为它会打印j,它仍然会随着循环运行而更新。

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


推荐阅读