python - 为什么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 也被拒绝
有人可以解释一下为什么会这样吗?
解决方案
您的问题与您尝试转换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
。
推荐阅读
- ruby-on-rails - 如何让 Bootstrap Javascript 在 Ruby on Rails 6 中工作
- c# - Datagridview 单元格单击事件错误以获取数据网格到文本框
- kotlin - 将 lambda 的所有参数转发给函数
- python - 安装 jupyter 时出现“AttributeError:_DistInfoDistribution__dep_map”
- elasticsearch - jhipster 中的 JestElasticsearchException
- php - 如何*正确*检查字符串是否具有 PHP 中 UTF-8 的“有效字节序列”?
- javascript - Jquery代码不会在ajax调用上修改html标签的属性
- reactjs - 如何使用 react native render html 在一行中显示文本和图像?
- android - Android Studio 在构建期间每次都会下载 maven 元数据
- node.js - 无法将工作进程附加到 Bull Queue