鱼C论坛

 找回密码
 立即注册
查看: 7581|回复: 3

Python3 re模块中group函数问题

[复制链接]
发表于 2015-6-1 21:09:11 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 ro0tsky 于 2015-6-1 21:43 编辑
  1. p = re.compile(r'((25[1-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[1-5]|2[0-4]\d|[01]?\d?\d)')
  2. fp = open('iplist.txt', 'r')
  3. for eachline in fp:
  4.     ipList.append(p.search(eachline).group())
复制代码


上述代码抛出:AttributeError: 'NoneType' object has no attribute 'group'

下面这种写法就完全没有问题,求助!!!
  1. p.search(fp.readline()).group()
复制代码

最佳答案

查看完整内容

第一,异常抛出的是'None type' object has no attribute 'group',翻译过来:None类型没有group属性,None类型的变量只有一个None 第二,你扣出来的p.search(fp.readline()).group(),相当时for循环执行了一次的结果,但是for循环一直执行到文件读取完毕,所以你的上面的代码和下面扣出来的代码不等价,结合第一条分析,应该是for循环执行到某次循环时p.search(eachline)返回值为None,这也是为什么我让你把iplist.txt发出来的原 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-1 21:09:12 | 显示全部楼层
第一,异常抛出的是'None type' object has no attribute 'group',翻译过来:None类型没有group属性,None类型的变量只有一个None
第二,你扣出来的p.search(fp.readline()).group(),相当时for循环执行了一次的结果,但是for循环一直执行到文件读取完毕,所以你的上面的代码和下面扣出来的代码不等价,结合第一条分析,应该是for循环执行到某次循环时p.search(eachline)返回值为None,这也是为什么我让你把iplist.txt发出来的原因,应该有一行数据代入到p.search()时返回了line,
不好意思,我正则没有学,只能分析到这,我的理解,可以尝试一下:
1、查一下search方法什么时候会返回None,再结合你的数据分析一下哪里出了问题
2、如果你的数据中必然会出现返回None的情况,可以用try捕获AttributeError并做相应的处理
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-1 22:24:25 | 显示全部楼层
iplist.txt文件最好放上来别人也好测试,另外你的第二段代码只有一句,你的意思是把这句放在循环体中么,如果是的话这种在文件迭代过程中调用readline方法的做法没问题么(我只是有点怀疑~~)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-6-1 23:04:19 | 显示全部楼层
lightninng 发表于 2015-6-1 22:24
iplist.txt文件最好放上来别人也好测试,另外你的第二段代码只有一句,你的意思是把这句放在循环体中么,如 ...

iplist.txt就是我随手打的一些IP地址,比如这样:
8.8.8.8
256.1.1.1
192.168.1.1

问题不在这里,for循环里,抛出的异常提示我p.search(eachline)没有group()这个属性
我把for循环里的这段代码扣出来,也就是第二段代码:p.search(fp.readline()).group(),这个代码就运行正常。
so....
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-16 08:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表