我有一个名为" filename.txt"
的文本文件文件内容:
This is just a text
content to store
in a file.
我已经制作了两个python脚本来提取"到#34;来自文本文件
我的第一个剧本:
#!/usr/bin/python
import re
f = open("filename.txt","r")
for line in f:
text = re.match(r"content (\S+) store",line)
x = text.group(1)
print x
我的第二个剧本:
#!/usr/bin/python
import re
f = open("filename.txt","r")
for line in f:
text = re.match(r"content (\S+) store",line)
if text:
x = text.group(1)
print x
第二个脚本提供正确的输出
bash-3.2$ ./script2.py
to
但是第一个脚本给了我一个错误
bash-3.2$ ./script1.py
Traceback (most recent call last):
File "./script1.py", line 6, in ?
x = text.group(1)
AttributeError: 'NoneType' object has no attribute 'group'
如何添加" if"条件给我正确的输出,当我删除它我得到一个错误?
答案 0 :(得分:1)
这是因为在您的第一个代码中,您的正则表达式无法匹配任何内容,因此text
是NoneType
。当您尝试执行group
时,会抛出AttributeError: 'NoneType' object has no attribute 'group'
错误
但是,对于正则表达式,您的代码不会失败,因为只有当某些内容 匹配时,您才会小心地调用group
你的第二种方法更好,因为它不像第一种方法那样是失败证明。
答案 1 :(得分:1)
错误对我来说非常明显:如果找不到匹配项,re.match
会返回None
。(请参阅doc)。
因此,当您的正则表达式不匹配(例如第一行)时,您尝试访问group
对象的NoneType
属性时,会抛出错误。
在另一种情况下,如果text
不是None
,您只能访问该媒体资源(因为这是if text:
检查的内容)。