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


292

私は言うエラーが出続けます

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

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


8
問題を示すコードの最小のビットを引き出します。投稿してください。print関数(またはバージョンによってはステートメント)を追加して、この問題が発生しているコードに変数が実際に持つ実際の値を明らかにします。
S.Lott、2012年

1
「NoneType」は、タイプ=なしを意味します。おそらく宣言されていない変数にアクセスしようとしています。私たちがお手伝いできるように、要旨を投稿してください。
ロイック・G.

2
@LoïcGRENON:「宣言されていない変数」?Pythonでは?それはあまり意味がありません。変数をどのように宣言しますか?
S.Lott、2012年

2
@LoïcGRENON-Pythonではありません。「割り当て前に参照」例外が発生します。変数のデフォルトはになっていませんNone
gddc 2012年

1
@LoïcGRENON:あなたが話しているこの考えを実証するコードはありますか?
S.Lott、2012年

回答:


287

NoneTypeは、操作していると思われるクラスやオブジェクトのインスタンスではなく、実際に取得したことを意味しますNone。これは通常、上記の割り当てまたは関数の呼び出しが失敗したか、予期しない結果を返したことを意味します。


111

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

foo = None
foo.something = 1

または

foo = None
print foo.something

両方とも AttributeError: 'NoneType'


9
これは、人々がNone何かから抜け出すことになるかもしれない方法を指摘するまでおそらく役に立たないでしょう。明示的なfoo = Noneことが問題になることはほとんどありません。それが成功するか、結果セットが空であるか何であれ、戻ってくるかもしれfoo = something()ないことに気づかsomething()ないでしょNoneう。
tripleee

54

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

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

mylist = mylist.sort()

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


これは素晴らしい説明です。c#でnull参照例外が発生するようなものです。変数には値が割り当てられておらず、None .. Thxです。
ケン

17

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

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

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


1
(編集前)のlifetime価値はなかったと思いますNone。彼は何か別のものの寿命属性にアクセスしようとしていましたNone
gddc 2014年

13

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

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

y = return_something(2)
y.real()

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

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

ポイントは以下のとおりです。

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

4

これは、アクセスしようとしているオブジェクトを意味しますNoneNoneあるNullPythonでの変数。このタイプのエラーは、コードによって次のように発生します。

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")

1

gddcは正しいですが、非常に頻繁な例を追加します。

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


ええ、わかりましたが、どのようにそのチェックを行いますか?
not2qubit

if foo == None:
barribow

if foo is not None:
Gringo Suave

1

推定器(sklearn)を構築するときに、フィット関数で自分自身を返すのを忘れると、同じエラーが発生します。

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'がありませんか?

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


0

FlaskアプリケーションでHTMLをコメントアウトすると、このエラーが発生する可能性があります。ここで、qual.date_expiryの値はNoneです。

   <!-- <td>{{ qual.date_expiry.date() }}</td> -->

行を削除するか修正します。

<td>{% if qual.date_attained != None %} {{ qual.date_attained.date() }} {% endif %} </td>

-1

以下のようなものを割り当てると、「AttributeError: 'NoneType' object has no attribute 'show'」としてエラーがスローされます。

df1=df.withColumn('newAge',df['Age']).show() 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.