2017-08-03 5 views
-1

なぜ、このコードは、ワークスローエラー私は、インデックスまたはここに任意の型/オブジェクトを呼び出すことはないよ「if list[(userlstlen-1)] < list[(userlstlen-2)]: TypeError: 'type' object is not subscriptableはTypeError:「タイプ」オブジェクトはリストのインデックスに添字化されていない

。ここで

def find_linear_quadratic(userlst, userlstlen): 
    while userlstlen != 0: 
     print("iteration: \n", userlstlen) 
     # Start body here 
     if list[(userlstlen-1)] < list[(userlstlen-2)]: 
      A = list[(userlstlen-1)] 
      list[(userlstlen-1)] = list[(userlstlen-2)] 
      list[(userlstlen-1)] = A 
      userlstlen -= 1 
    return userlst 

def main(): 
    list = [3,2,1] 
    lstlen = list.__len__() 

    find_linear_quadratic(list, lstlen) 

main() 
+0

_ "ここではどのタイプ/オブジェクトでもインデックスを作成したり呼び出しているわけではありません。"オブジェクトに角括弧を使用しています(例:あなたは 'list'でそれをやっています。これは型です。 – Kevin

+0

あなたのリストの名前は 'list' *外部*です。(これは組み込み型のシャドーイングには悪い考えですが)*関数内ではパラメータ名' userlst'をとります。また、 '__magic_methods__'を直接呼び出すことはほとんどありません。' thing .__ len __() 'は' len(thing) 'でなければなりません。 – jonrsharpe

+1

'main()'では、組み込みの 'list'型を(ローカル)変数に再定義するので、それを使うことができます。しかし、型を使用している 'find_linear_quadratic()'ではそうではありません。 – martineau

答えて

1

問題:それはまだメインのみとfind_linear_quadraticため表示されていないため、ローカルのです

def main(): 
    list = [3,2,1] 
    lstlen = list.__len__() 

    find_linear_quadratic(list, lstlen) 

:あなたが主な機能でタイプを影ながら

Listが、有効なPythonのデータ型ですしたがって、あなたがfind_linear_quadraticの中でそれを扱おうとしているとき、例えば:

def find_linear_quadratic(userlst, userlstlen): 
    while userlstlen != 0: 
     print("iteration: \n", userlstlen) 
     # Start body here 
     if list[(userlstlen-1)] < list[(userlstlen-2)]: 
      A = list[(userlstlen-1)] 
      list[(userlstlen-1)] = list[(userlstlen-2)] 
      list[(userlstlen-1)] = A 
      userlstlen -= 1 
    return userlst 
内部データ型またはの名前を使用して変数を呼び出すために

TypeError: 'type' object is not subscriptable

基本的にそれはあります悪い習慣:

したがって、エラーメッセージにつながる、代わりにあなたがメインで定義した変数のPythonのデータ型を参照しますこれは通常このようなエラーに終わり、混乱につながるからです。

関連する問題