380

というエラーが表示され続けます

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

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

4

10 に答える 10

370

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

于 2012-01-20T23:40:07.060 に答える
126

None に等しい変数があり、「何か」と呼ばれるその属性にアクセスしようとしています。

foo = None
foo.something = 1

また

foo = None
print(foo.something)

どちらもAttributeError: 'NoneType'

于 2012-01-20T23:40:51.437 に答える
63

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

予期しない別の一般的な理由はNone、可変オブジェクトに対するインプレース操作の割り当てです。例えば:

mylist = mylist.sort()

リストのsort()メソッドは、リストをその場でソートします。つまり、mylist変更されます。しかし、メソッドの実際の戻り値はNoneソートされたリストではありません。これで、 に割り当てられNoneましたmylist。次に実行しようとすると、mylist.append(1)Python でこのエラーが表示されます。

于 2012-01-21T00:20:36.917 に答える
17

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

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

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

于 2012-01-20T23:41:57.057 に答える
4

推定器 (sklearn) を作成するときに、fit 関数で self を返すのを忘れると、同じエラーが発生します。

class ImputeLags(BaseEstimator, TransformerMixin):
    def __init__(self, columns):
        self.columns = columns

    def fit(self, x, y=None):
        """ do something """

    def transfrom(self, x):
        return x

AttributeError: 'NoneType' オブジェクトに属性 'transform' がありませんか?

fit 関数に追加return selfすると、エラーが修正されます。

于 2020-01-29T15:56:40.260 に答える
3

アクセスしようとしているオブジェクトを意味しますNone。PythonNoneの変数です。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")
于 2019-03-03T09:08:22.893 に答える