列表元素转小写并替换空格为下划线时触发AttributeError错误的解决求助
列表元素转小写并替换空格为下划线时触发AttributeError错误的解决求助
嘿,我来帮你搞定这个问题~首先先理清楚你遇到的问题和错误原因:
你想要把列表里的名字转换成小写,同时把空格替换成下划线_,但写代码的时候触发了AttributeError,先来看看你的问题场景:
我想要修改这个列表:
names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]让元素变成小写,并且把空格替换成下划线
_。我试了下面的代码:names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"] usernames = [] for i in names: usernames = usernames.append(i.replace(" ", "_")) print(usernames)结果出现了这个错误:
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-96-513b68e18689> in <module> 4 # write your for loop here 5 for i in names: ----> 6 usernames = usernames.append(i.replace(" ", "_")) 7 8 AttributeError: 'NoneType' object has no attribute 'append'
错误原因分析
问题出在这行代码:usernames = usernames.append(i.replace(" ", "_"))
Python里列表的append()方法是原地修改原列表,它不会返回任何有效结果(实际上返回的是None)。所以第一次循环时,你把usernames赋值成了append()的返回值None,等到第二次循环再调用usernames.append()的时候,usernames已经变成None了,自然就触发了AttributeError。
另外你还漏掉了需求里的转小写步骤哦~
解决方法
方法1:修正for循环写法
只需要去掉多余的赋值操作,直接调用append()就好,同时加上lower()方法来转小写:
names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"] usernames = [] for name in names: # 先转小写,再替换空格 processed_name = name.lower().replace(" ", "_") usernames.append(processed_name) print(usernames)
运行后会得到你想要的结果:
['joey_tribbiani', 'monica_geller', 'chandler_bing', 'phoebe_buffay']
方法2:用列表推导式更简洁
Python里的列表推导式特别适合这种批量转换列表元素的场景,代码更紧凑高效:
names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"] usernames = [name.lower().replace(" ", "_") for name in names] print(usernames)
这个写法和上面的for循环效果完全一致,但代码更简洁易读。
备注:内容来源于stack exchange,提问作者Florence Obasi
相关产品推荐
相关产品推荐

