web-dev-qa-db-ja.com

PythonでNoneTypeを "テスト"する方法?

私は時々NoneType値を返すメソッドがあります。それでは、どのように私はNoneTypeである変数に質問することができますか?私は if methodを使う必要があります、例えば

if not new:
    new = '#'

それが間違ったやり方であることを私は知っています、そして私があなたが私の言っていることを理解することを願っています。

297
CrveniZg

それでは、どのように私はNoneTypeである変数に質問することができますか?

このようにis演算子を使用してください。

if variable is None:

なぜこれが機能するのですか?

Pythonでは NoneNoneType の唯一のシングルトンオブジェクトなので、is演算子を使用して、変数にNoneが含まれているかどうかを確認できます。

is docs からの引用

演算子isis notは、オブジェクトの同一性をテストします。x is yは、xyが同じオブジェクトである場合に限り、trueです。 x is not yは、逆の真理値を返します。

Noneのインスタンスは1つしか存在できないため、isNoneをチェックするのに適した方法です。


馬の口からそれを聞く

引用符 - Pythonのコーディングスタイルガイドライン - PEP-008 (Guido自身によって共同定義された)、

None)のようなシングルトンとの比較は、常にisまたはis not決して等価演算子ではないで行われるべきです。

463
thefourtheye
if variable is None:
   ...

if variable is not None:
   ...
54
elhoucine

Alex Hallの答え :のようにisinstanceでもできます。

>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True

isinstanceも直感的ですが、次の行を必要とするという複雑な問題があります。

NoneType = type(None)

これはintfloatのような型には必要ありません。

17
cardamom

Aaron Hillのコマンドで指摘されているように、

NoneTypeをサブクラス化することはできず、またNoneはシングルトンなので、isinstanceNoneの検出に使用しないでください。代わりに、受け入れられている回答のとおりにis Noneまたはis not Noneを使用してください。


元の回答:

しかし最も簡単な方法は、 cardamomの答え に追加の行を追加しないことです。
isinstance(x, type(None))

それでは、どのように私はNoneTypeである変数に質問することができますか? ifメソッドを使う必要があります

isinstance()を使用することは、is-ステートメント内にifを必要としません。

if isinstance(x, type(None)): 
    #do stuff

追加情報
documentation に記載されているように、1つのisinstance()ステートメントで複数の型をチェックすることもできます。タプルとしてタイプを書くだけです。

isinstance(x, (type(None), bytes))
10
Martin Müsli

Python 2.7:

x = None
isinstance(x, type(None))

または

isinstance(None, type(None))

==>真

1
Pesko

これが質問に答えるかどうかわからない。しかし、これを理解するのにしばらく時間がかかったことを私は知っています。私はウェブサイトをループしていました、そして、突然作家の名前はもうそこにありませんでした。チェックステートメントが必要でした。

if type(author) == type(None):
     my if body
else:
    my else body

この場合、authorは任意の変数にすることができ、Noneはあなたがチェックしている任意の型にすることができます。

0
Joshua Pachner

この例があなたに役立つことを願っています)

print(type(None) # NoneType

だから、あなたは変数名の型をチェックすることができます

#Example
name = 12 # name = None
if type(name) != type(None):
    print(name)
else:
    print("Can't find name")
0
alexmosk25