web-dev-qa-db-ja.com

AttributeError: 'NoneType'オブジェクトに属性 'something'がないのはなぜですか?

というエラーが出続けます

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

私が持っているコードはここに投稿するには長すぎます。これがAttributeErrorを引き起こす一般的なシナリオ、NoneTypeとはどういう意味ですか、どうすればよいのでしょうか。

225
Jacob Griffin

NoneTypeは、作業していると思われるClassやObjectのインスタンスではなく、実際にはNoneを持つということです。これは通常、上記の代入または関数呼び出しが失敗したか、または予期しない結果を返したことを意味します。

227
g.d.d.c

Noneと等しい変数があり、 'something'という名前の属性にアクセスしようとしています。

foo = None
foo.something = 1

または

foo = None
print foo.something

両方ともAttributeError: 'NoneType'を生成します

89
koblas

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

あなたがそれを期待しないNoneを持っているもう一つの一般的な理由は可変オブジェクトのインプレース操作の割り当てです。例えば:

mylist = mylist.sort()

リストのsort()メソッドはリストをその場でソートします。つまり、mylistは変更されます。しかし、このメソッドの実際の戻り値はNoneで、ソートされたリストではありません。 Nonemylistに代入しました。あなたが次にやろうとした場合、例えば、mylist.append(1) Pythonはあなたにこのエラーを与えるでしょう。

39
kindall

NoneTypeは、値Noneの型です。この場合、変数lifetimeの値はNoneです。

これを実現する一般的な方法は、returnがない関数を呼び出すことです。

ただし、変数をNoneに設定する方法は他にも無限にあります。

14
S.Lott

以下のコードを見てください。

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

y = return_something(2)
y.real()

これによりエラーが発生します

AttributeError: 'NoneType'オブジェクトには 'real'属性はありません

だから、ポイントは以下の通りです。

  1. コードでは、関数またはクラスメソッドは何も返していないか、Noneを返していません。
  2. 次に、返されたオブジェクトの属性(None)にアクセスしようとすると、エラーメッセージが表示されます。
11
PHINCY L PIOUS

それはあなたがNoneにアクセスしようとしているオブジェクトを意味します。 NoneはpythonのNull変数です。この種のエラーは、コードによって発生することがあります。

x1 = None
print(x1.something)

#or

x1 = None
x1.someother = "Hellow world"

#or
x1 = None
x1.some_func()

# you can avoid some of these error by adding this kind of check
if(x1 is not None):
    ... Do something here
else:
    print("X1 variable is Null or None")
2
M. Hamza Rajput

g.d.d.c正しいですが、非常に頻繁な例を追加します。

この関数は再帰的な形で呼び出すことができます。その場合は、nullポインタまたはNoneTypeになる可能性があります。その場合、このエラーが発生する可能性があります。そのため、そのパラメータの属性にアクセスする前に、それがNoneTypeでないことを確認してください。

0
barribow