私は数学のための小さなプログラムを作成しています(特別な理由はありませんが、ちょっとしたかっただけです)。「TypeError: 'NoneType' object is not subscriptable。
私はこのエラーを見たことがないので、その意味がわかりません。
import math
print("The format you should consider:")
print str("value 1a")+str(" + ")+str("value 2")+str(" = ")+str("value 3a ")+str("value 4")+str("\n")
print("Do not include the letters in the input, it automatically adds them")
v1 = input("Value 1: ")
v2 = input("Value 2: ")
v3 = input("Value 3: ")
v4 = input("Value 4: ")
lista = [v1, v3]
lista = list.sort(lista)
a = lista[1] - lista[0]
list = [v2, v4]
list = list.sort(list)
b = list[1] = list[0]
print str(a)+str("a")+str(" = ")+str(b)
エラー:
Traceback (most recent call last):
File "C:/Users/Nathan/Documents/Python/New thing", line 16, in <module>
a = lista[1] - lista[0]
TypeError: 'NoneType' object is not subscriptable
lista = list.sort(lista)
これは
lista.sort()
.sort()
メソッドはインプレースであり、Noneを返します。値を返すインプレースでないものが必要な場合は、使用できます
sorted_list = sorted(lista)
#1は別として、リストをlist
と呼ばないでください。それは組み込みリスト型を破壊します。
余談#2:この行が何をするのかわからない:
print str("value 1a")+str(" + ")+str("value 2")+str(" = ")+str("value 3a ")+str("value 4")+str("\n")
単純にですか
print "value 1a + value 2 = value 3a value 4"
?言い換えれば、すでにstrであるものに対してstrを呼び出している理由がわかりません。
#3は別として:print("something")
(Python 3構文)を使用する場合と、print "something"
(Python 2)を使用する場合があります。後者の場合、py3でSyntaxErrorが発生するため、2。*を実行する必要があります。この場合、習慣を付けたくないか、余分な括弧を付けてタプルを印刷することになります。括弧内に要素が1つしかない場合、それはタプルとして解釈されないため、ここでは十分に機能することを認めますが、Pythonの目には奇妙に見えます。
例外TypeError: 'NoneType' object is not subscriptable
は、lista
の値が実際にNone
であるために発生します。 Pythonコマンドラインでこれを試すと、コードで取得したTypeError
を再現できます。
None[0]
lista
がNoneに設定される理由は、list.sort()
の戻り値がNone
であるためです...ソートされたnot元のリストのコピー。代わりに、 ドキュメントが指摘している のように、リストはコピーが作成される代わりにin-placeでソートされます(これは効率の理由)。
元のバージョンを変更したくない場合は、使用できます
other_list = sorted(lista)
前に回答の1つで述べたように、このエラーはリストの値が空であることが判明したときに発生します。この質問には完全には関係ありませんが、opencvとnumpyを使用して画像を読み取るときに同じエラーが発生しました。ファイル名がおそらく指定されたものと異なるか、作業ディレクトリが適切に指定されていないためです。
このリンクで https://docs.python.org/2/tutorial/datastructures.html このメソッドを読むことができます「リストのアイテムを所定の位置に並べ替える」これは結果の値がオンになることを意味しますソートされ、結果はそれ自体になります。関数はNoneを返します。
結果を14行目の「lista」に割り当てた場合
lista = list.sort(lista)
なしに設定します。それがエラーです。 Noneは常にデータを持たず、添え字付けできません。 「TypeError: 'NoneType'オブジェクトは添え字付けできません」
(リストをソートするために)このエラーを修正するには、14行目でこれを行います。
lista.sort() # this will sort the list in line
ただし、他にもいくつかのエラーがあります。割り当て時の18行目:
list = [v2, v4]
この組み込み型「リスト」をクローブすると、次のエラーが表示されます。
TypeError: 'list' object is not callable
これを修正するには、次のように言います。
lista2 = [v2, v4]
19行目も14行目と同じエラーです。これを実行して、他のリストをソートします。
lista2.sort()
21行目では、組み込み型リストのインデックスを作成しようとしています。これを修正するには:
b = lista2[1] = lista2[0]
これにより、コードが正常に実行されます。最後に正しいコード全体:
import math
print("The format you should consider:")
print str("value 1a")+str(" + ")+str("value 2")+str(" = ")+str("value 3a ")+str("value 4")+str("\n")
print("Do not include the letters in the input, it automatically adds them")
v1 = input("Value 1: ")
v2 = input("Value 2: ")
v3 = input("Value 3: ")
v4 = input("Value 4: ")
lista = [v1, v3]
lista.sort()
a = lista[1] - lista[0]
lista2 = [v2, v4]
lista2.sort()
b = lista2[1] = lista2[0]
print str(a)+str("a")+str(" = ")+str(b)