Python报错:'NoneType'对象无append属性,列表为何变NoneType?
问题
我在开展一个工作项目,创建了两个均由字符串组成的列表,分别命名为wordlist_line1和titles:
wordlist_line1 = ["2023-06-09","EXE-shdywbedud","Heavy Circuit"] titles = ["Time", "Device Name", "App Name"]
我的目标是将这两个列表合并为一个元组列表,初始时定义了空列表line1 = [],期望得到的结果如下:
[('Time','2023-06-09'), ('Device Name','EXE-shdywbedud'), ('App Name', 'Heavy Circuit')]
我尝试用以下for循环实现:
for i in range(0,len(titles)): line1.append((titles[i], wordlist_line1[i]))
但实际运行时错误地写为:
line1 = line1.append((titles[i],wordlist_text1[i]))
出现如下报错:
Traceback (most recent call last): File "<pyshell#25>", line 2, in <module> line1 = line1.append((titles[i],wordlist_text1[i])) AttributeError: 'NoneType' object has no attribute 'append'
请问为何我的列表会变成NoneType,该如何修复?
原因与修复方案
原因
Python中列表的append()方法是原地修改列表,它的返回值是None。当你执行line1 = line1.append(...)时,第一次循环会把原本是列表的line1赋值为append()的返回值None,第二次循环再调用line1.append()时,line1已经是None类型,自然会抛出AttributeError。另外你还写错了变量名,把wordlist_line1写成了wordlist_text1,这也是潜在问题。
修复方案
方案1:修正循环代码
去掉多余的赋值操作,同时修正变量名:
line1 = [] for i in range(0, len(titles)): line1.append((titles[i], wordlist_line1[i]))
这样append()会直接修改line1列表,不会覆盖它的值。
方案2:使用更简洁的zip()函数
Python内置的zip()函数可以直接将两个列表对应位置的元素配对,再转成列表即可一行实现需求:
line1 = list(zip(titles, wordlist_line1))
这个方法比手动写循环更简洁高效,也避免了索引操作可能带来的错误。
内容的提问来源于stack exchange,提问作者Ilia
相关产品推荐
相关产品推荐

