Python报错AttributeError: 'NoneType'对象无replace属性如何解决
报错原因
你触发报错的核心原因是:代码先把空字符串赋值为None,后续对下标1、2的元素执行replace操作时,没有判断元素是否为None,而None对象不存在replace方法,最终抛出属性错误。
修复方案
推荐优先调整处理逻辑的顺序,先完成大写字母移除,再处理空字符串转None,从根源上避免操作None值,同时可以用str.maketrans替代循环调用replace,执行效率更高。
修复后代码示例
a = [['something', 'G3535354', '33453421D'], ['something', '', 'R3848347']] # 生成大写字母移除映射表 remove_upper_table = str.maketrans('', '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') for row in a: # 先移除下标1、2元素的大写字母,仅非空值做处理 if row[1]: row[1] = row[1].translate(remove_upper_table) if row[2]: row[2] = row[2].translate(remove_upper_table) # 再统一把空字符串替换为None for idx in range(len(row)): if row[idx] == '': row[idx] = None print(a)
运行后输出结果为:
[['something', '3535354', '33453421'], ['something', None, '3848347']]
如果你要保留原有循环调用replace的写法,只需要在执行替换前增加非None判断即可:
for character in char_no: if row[1] is not None: row[1] = row[1].replace(character, "") if row[2] is not None: row[2] = row[2].replace(character, "")
内容的提问来源于stack exchange,提问作者Baja
相关产品推荐
相关产品推荐

