《Python编程快速上手》第8章正则搜索练习出现AttributeError报错
报错原因
re.search() 方法在目标文本中没有命中任何正则匹配项时,会返回 None,此时直接调用 .group() 方法就会触发该属性错误。你单独测试匹配逻辑时使用的是存在对应内容的文件,所以可以正常运行;但脚本遍历文件夹下所有txt文件时,只要有任意一个文件没有匹配结果,就会崩溃。
修复方案
你需要先判断匹配结果是否为 None,确认匹配成功后再调用 .group() 方法,同时可以优化文件操作逻辑避免资源泄漏:
- 给Windows路径添加
r前缀标记为原始字符串,避免反斜杠被识别为转义字符引发路径错误 - 使用
with上下文管理器打开文件,执行完操作后会自动关闭文件,无需手动调用close方法 - 增加匹配结果判断分支,无匹配时跳过
group()调用
修改后的参考代码
import os, glob, re # 路径前加r标记为原始字符串 os.chdir(r"C:\Automating The Boring Stuff With Python\Chapter 8 - Reading and Writing Files\Practice Projects\RegexSearchTextFiles") userRegex = re.compile(input('Enter your Regex expression :')) for textFile in glob.glob("*.txt"): print(f"===== 处理文件:{textFile} =====") # 用with自动管理文件句柄,指定编码避免特殊字符读取报错 with open(textFile, 'r', encoding='utf-8') as currentFile: textCurrentFile = currentFile.read() searchedText = userRegex.search(textCurrentFile) if searchedText: print(f"匹配到结果:{searchedText.group()}") else: print("当前文件未匹配到对应内容")
如果你需要提取同一个文件里的所有匹配结果,可以将search方法替换为findall方法,直接返回所有匹配内容的列表:
matched_list = userRegex.findall(textCurrentFile) if matched_list: print(f"匹配到的所有结果:{matched_list}")
内容的提问来源于stack exchange,提问作者Shaye
相关产品推荐
相关产品推荐

