You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

《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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:48:02