2012-01-20 18 views
165

私は私が持っているのPython:属性エラー - 「NoneType」オブジェクトが属性を持っていない「何か」

AttributeError: 'NoneType' object has no attribute 'something' 

コードはここに投稿するにはあまりにも長いです、誰かができれば、私は思っていたというエラーを取得しておきますこの 'AttributeError'の原因となる一般的なシナリオの要点を教えてください。'NoneType'はどういう意味ですか? (通常は、コードが間違っているオブジェクトの名前を受け取るでしょうが、それは私に 'NoneType'を与える​​ので、行番号以外のものを絞り込む方法がわかりません)

+5

問題を示す最小のコードを引き出します。それを投稿する。変数が実際にこの問題を抱えているコードにある実際の値を明らかにするには、 'print'関数(またはバージョンに応じた文)を追加します。 –

+1

'タイプなし'の平均タイプ=なし。おそらく宣言されていない変数にアクセスしようとしています。私たちがあなたを助けることができるように要点を掲示するべきです。 –

+2

@LoïcGRENON: "宣言されていない変数"? Pythonで?それはあまり意味がありません。どのように変数を宣言しますか? –

答えて

168

なしタイプ意味実際にはNoneを得ていると思います。これは通常、上記の代入または関数呼び出しが失敗したか、または予期しない結果を返したことを意味します。

69

変数にはNoneがあり、「something」という属性にアクセスしようとしています。

foo = None 
foo.something = 1 

又は

foo = None 
print foo.something 

両方がAttributeError: 'NoneType'

10

NoneTypeNoneの一種であるが得られます。この場合、変数lifetimeの値はNoneです。

これを行う一般的な方法は、機能がありませんreturnを呼び出すことです。

変数を[なし]に設定する方法は他にも無限にあります。

+1

私は 'lifetime'が' None'(pre-edit)の値を持っていたとは思わない。彼は生涯に{none}の何かの_attribute_にアクセスしようとしていました。 –

29

他の人は、NoneTypeが何であるかを説明し、それに終わる一般的な方法(関数から値を返さない)について説明しました。

Noneがある別の一般的な理由は、変更可能なオブジェクトにインプレース操作を割り当てることが期待できないところです。たとえば:

mylist = mylist.sort() 

リストのsort()方法は、インプレースのリストをソート、つまり、mylistが変更されます。しかし、メソッドの実際の戻り値はNoneであり、リストはソートされていません。したがってNonemylistに割り当てただけです。次回にしようとすると、mylist.append(1) Pythonがこのエラーを表示します。

+2

これは私がやっていたことです。実際には何も返さなかった関数の戻り値を変数に代入しています。ありがとう! – Kaya311

4

下記のコードを検討してください。

def return_something(someint): 
if someint > 5: 
    return someint 

y = return_something(2) 
y.real() 

これは

AttributeError: 'NoneType' object has no attribute 'real'

だからポイントは以下の通りですエラーにあなたを与えるために起こっています。コードで

  1. 、関数やクラスメソッドは、次にエラーメッセージの原因と、(Noneです)が返されたオブジェクトの属性にアクセスしようとする何かを返すか、どれ
  2. を返していないされていません。
関連する問題