2016-04-11 11 views
-2

私はこのように私のコードを実行します。私の理解split_2から分割を実行するときにこの「NoneType」エラーが発生するのはなぜですか?

Traceback (most recent call last): 
File "/Users/Documents/explab.py", line 16, in <module> 
split_2 = split_2.remove(split[3]) 
AttributeError: 'NoneType' object has no attribute 'remove' 

What number? 4 
1 (write) or 2? 2 

まず、これが印刷されています

['', '1233', '8989', '5\n'] 
None 

その後、次のエラーが発生するとNoneTypeではなくリストにする必要がありますが、これは正しいですか?誰でもコードを修正して意図したとおりに機能する方法を知っていますか?

number = input("What number? ") 
choice = input("1 (write) or 2? ") 
if choice == "1": 
with open("r_3exp","a") as file_1: 
    file_1.write (' \n') 
    file_1.write ('Here are some numbers : 1233 8989' + ' ' + number) 
elif choice == "2": 
    with open("r_3exp","r") as file_1: 
    for line in file_1: 
     split_1 = line.split (":") 
     if len(split_1[1]) < 500: 
      split_2 = split_1[1].split(' ') 
      print (split_2) 
      split_2 = split_2.insert(0, number) 
      print (split_2) 
      split_2 = split_2.remove(split[3]) 
      print (split_2) 
+3

実際のコードを投稿できますか? – Torxed

+0

'split [3]'はあなたが定義した変数ではありません –

+0

http://stackoverflow.com/questions/9983254/python-list-functions-not-returning-new-lists –

答えて

1

removeinsertは、リストのインプレース操作です。元のリストを変更してNoneを返します。

デモ:

>>> lst = [1, 2, 3] 
>>> return_value = lst.remove(2) 
>>> return_value is None 
True 
>>> lst 
[1, 3] 
>>> 
>>> lst = [1, 2, 3] 
>>> return_value = lst.insert(0, 7) 
>>> return_value is None 
True 
>>> lst 
[7, 1, 2, 3] 

これはremoveまたはinsertの戻り値に割り当てる必要はありませんを意味します。

あなたはNoneあるライン

split_2 = split_2.insert(0, number) 

list.insertの戻り値に名前split_2を割り当てるので、あなたがエラーを取得しています。その後、予想通り失敗したライン

split_2 = split_2.remove(split[3]) 

None上のメソッドremoveを呼び出そう。

関連する問題