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
相关产品推荐
相关产品推荐

