涉及"AttributeError:'NoneType'对象的奇怪错误没有属性'append'"

use*_*192 1 python attributeerror

所以我试图解析一个文本文件,将其转换为一个列表并拆分空间列表中的每个项目.

我创建了一个测试变量来自己运行这部分代码.我在Spyder编辑器中的代码:

test = ['NC_009142.1_03_012_002_001 560', 'NC_017586.1_13_009_003_001 555', 'NC_016111.1_13_010_003_001 555']
ListOfLinesParsed = test

PN_List = []
counter_iterative = 0
while counter_iterative < len(ListOfLinesParsed):
    PN_List = PN_List.append(ListOfLinesParsed[counter_iterative].split()[0])
    counter_iterative += 1

print PN_List
Run Code Online (Sandbox Code Playgroud)

哪个返回错误:

runfile(r'/ home/jake/.spyder2/.temp.py',wdir = r'/ home/jake/.spyder2')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "/usr/lib/python2.7/dist-
packages/spyderlib/widgets/externalshell/sitecustomize.py", line 493, in runfile

    execfile(filename, namespace)
  File "/home/jake/.spyder2/.temp.py", line 7, in <module>

    PN_List = PN_List.append(ListOfLinesParsed[counter_iterative].split()[0])

AttributeError: 'NoneType' object has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)

但是,如果我直接输入命令到终端我没有错误:

testL = []

testL.append(试验[0] .split()[0])

为test1

['NC_009142.1_03_012_002_001']
Run Code Online (Sandbox Code Playgroud)

testL.append(试验[1] .split()[0])

为test1

['NC_009142.1_03_012_002_001', 'NC_017586.1_13_009_003_001']
Run Code Online (Sandbox Code Playgroud)

testL.append(测试[2] .split()[0])

为test1

['NC_009142.1_03_012_002_001', 'NC_017586.1_13_009_003_001', 'NC_016111.1_13_010_003_001']
Run Code Online (Sandbox Code Playgroud)

两件事情不应该完全一样吗?我不明白为什么我的脚本中的一个行为与终端命令不同.

Vol*_*ity 6

这条线

PN_List = PN_List.append(ListOfLinesParsed[counter_iterative].split()[0])
Run Code Online (Sandbox Code Playgroud)

是问题.

list.append是一个就地操作,它返回None,但改变原始列表本身.如果您分配PN_List给结果,它就会变为None.如果不这样做,那么您的程序将顺利运行.这就是为什么当你尝试附加没有作业的东西时,你会得到预期的答案.