Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么python代码拒绝整数?_Python_Regex_Python 3.x - Fatal编程技术网

为什么python代码拒绝整数?

为什么python代码拒绝整数?,python,regex,python-3.x,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])

我写了一个代码

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


有人能解释一下为什么会发生这种情况吗?

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


我一点也不清楚为什么在s列表中的值上已经有一个for循环的时候,还要做s[c]和c=c+1。只要试着转换j而不是s[c],它就会工作,然后你就可以完全从代码中删除c了。您也可以将c=c+1行的副本放在except块中,但我真的不建议这样做。事实上,我建议您将except的范围缩小一点,这样您就可以只处理ValueError异常,或者甚至使用一个更复杂的正则表达式,它与文本中的句点不匹配,所以您根本不需要try/except。

注意[0-9.]+将匹配1+个数字和点。s[c]?这个u=floats[c]可能应该是u=floatj,并且c已经过时。如果您取消对except块中的打印行的注释,那么是什么字符串导致了异常?匹配所有数字和点将匹配一些非数字值,例如点本身可能是文本中的句点,而不是小数点。使用?:\d+?:\。\d*?\124;\。\ d+当我使用[0-9.]+时,正如您所看到的,我在except块中放置了一条print语句以查看将拒绝的内容,程序也会拒绝整数和点。