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

Python将regex_type作为函数参数调用re方法触发AttributeError如何解决

问题解决方法

错误原因

现有写法会将regex_type识别为re模块的固定属性名,而非传入的动态参数值,因此无法匹配到findall/sub等实际存在的方法,触发属性不存在的报错。

解决方案

方案1:使用getattr动态获取方法(适配传方法名字符串的场景)

如果调用逻辑固定需要传入字符串类型的方法名,用Python内置的getattr函数从re模块动态读取对应方法即可,可增加合法性校验避免非法参数报错:

import re

def user_regex(regex_type, *args):
    # 动态获取re模块的对应方法,找不到则返回None
    re_method = getattr(re, regex_type, None)
    if not re_method or not callable(re_method):
        raise ValueError(f"re模块不存在{regex_type}方法")
    # 支持传入任意数量参数兼容sub等不同参数结构的方法
    result = re_method(*args)
    # 后续业务逻辑
    return result

调用示例:

  • 调用findall:user_regex("findall", r"\d+", "abc123def456")
  • 调用sub:user_regex("sub", r"\d+", "***", "abc123def456")

方案2:直接传入方法对象(更推荐)

如果可以调整调用逻辑,直接把re的方法本身作为参数传入即可,无需动态查找属性,逻辑更简洁、性能更高:

import re

def user_regex(re_method, *args):
    result = re_method(*args)
    # 后续业务逻辑
    return result

调用示例:

  • 调用findall:user_regex(re.findall, r"\d+", "abc123def456")
  • 调用sub:user_regex(re.sub, r"\d+", "***", "abc123def456")

内容的提问来源于stack exchange,提问作者Takamura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 20:21:02