1

そのため、テキストファイルをリストに変換し、リスト内の各アイテムをスペースで分割して、テキストファイルを解析しようとしています。

コードのこの部分を単独で実行するためのテスト変数を作成しました。スパイダーエディターの私のコード:

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

これはエラーを返します:

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'

しかし、コマンドをターミナルに直接入力しても、エラーは発生しません。

testL = []

testL.append(test [0] .split()[0])

testL

['NC_009142.1_03_012_002_001']

testL.append(test [1] .split()[0])

testL

['NC_009142.1_03_012_002_001', 'NC_017586.1_13_009_003_001']

testL.append(test [2] .split()[0])

testL

['NC_009142.1_03_012_002_001', 'NC_017586.1_13_009_003_001', 'NC_016111.1_13_010_003_001']

2つのことはまったく同じであるべきではありませんか?スクリプト内のものがターミナルコマンドとは異なる動作をしている理由がわかりません。

4

1 に答える 1

6

この線

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

問題です。

list.appendインプレース操作であり、を返しますNoneが、元のリスト自体を変更します。結果に割り当てるPN_Listと、になりNoneます。そうしないと、プログラムはスムーズに実行されます。これが、割り当てなしで物事を追加しようとすると、期待される答えが得られる理由です。

于 2013-02-24T01:52:55.567 に答える