というエラーが出続けます
AttributeError: 'NoneType' object has no attribute 'something'
私が持っているコードはここに投稿するには長すぎます。これがAttributeError
を引き起こす一般的なシナリオ、NoneType
とはどういう意味ですか、どうすればよいのでしょうか。
NoneTypeは、作業していると思われるClassやObjectのインスタンスではなく、実際にはNone
を持つということです。これは通常、上記の代入または関数呼び出しが失敗したか、または予期しない結果を返したことを意味します。
Noneと等しい変数があり、 'something'という名前の属性にアクセスしようとしています。
foo = None
foo.something = 1
または
foo = None
print foo.something
両方ともAttributeError: 'NoneType'
を生成します
他の人たちはNoneType
とは何か、そしてそれを終わらせる一般的な方法(つまり、関数から値を返さないこと)を説明しました。
あなたがそれを期待しないNone
を持っているもう一つの一般的な理由は可変オブジェクトのインプレース操作の割り当てです。例えば:
mylist = mylist.sort()
リストのsort()
メソッドはリストをその場でソートします。つまり、mylist
は変更されます。しかし、このメソッドの実際の戻り値はNone
で、ソートされたリストではありません。 None
をmylist
に代入しました。あなたが次にやろうとした場合、例えば、mylist.append(1)
Pythonはあなたにこのエラーを与えるでしょう。
NoneType
は、値None
の型です。この場合、変数lifetime
の値はNone
です。
これを実現する一般的な方法は、return
がない関数を呼び出すことです。
ただし、変数をNoneに設定する方法は他にも無限にあります。
以下のコードを見てください。
def return_something(someint):
if someint > 5:
return someint
y = return_something(2)
y.real()
これによりエラーが発生します
AttributeError: 'NoneType'オブジェクトには 'real'属性はありません
だから、ポイントは以下の通りです。
それはあなたが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")
g.d.d.c正しいですが、非常に頻繁な例を追加します。
この関数は再帰的な形で呼び出すことができます。その場合は、nullポインタまたはNoneType
になる可能性があります。その場合、このエラーが発生する可能性があります。そのため、そのパラメータの属性にアクセスする前に、それがNoneType
でないことを確認してください。