Jeśli Nonejest to jedyna wartość, którą zwraca metoda, dla której bool(returnValue)jest równa False, to if not new:powinna działać dobrze. Zdarza się to czasami we wbudowanych bibliotekach re.matchlib - na przykład zwraca wartość Brak lub obiekt zgodny z prawdą.
Kevin
Zobacz także moją odpowiedź na temat nulli Nonew Pythonie tutaj .
Michael Ekoka,
Odpowiedzi:
631
Jak mogę zakwestionować zmienną, która jest typu NoneType?
Użyj isoperatora, tak jak to
if variable isNone:
Dlaczego to działa?
Ponieważ Nonejest to jedyny obiekt typu singleton NoneTypew Pythonie, możemy użyć isoperatora do sprawdzenia, czy zmienna ma Nonew sobie czy nie.
Operatorzy isi is nottesty do identyfikacji obiektu: x is yjest prawdziwe wtedy i tylko wtedy x, a yto ten sam obiekt. x is not ydaje odwrotną wartość prawdy.
Ponieważ może istnieć tylko jedna instancja None, isbyłby to preferowany sposób sprawdzenia None.
Ponieważ nie można podklasować, NoneTypea ponieważ Nonejest to singleton, isinstancenie należy go używać do wykrywania None- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyć is Nonelub is not None.
Aaron Hall
18
Jak zauważył komentarz Aarona Halla:
Ponieważ nie można podklasować, NoneTypea ponieważ Nonejest to singleton, isinstancenie należy go używać do wykrywania None- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyć is Nonelub is not None.
Oryginalna odpowiedź:
Najprostszym sposobem jednak bez dodatkowej linii oprócz odpowiedzi na kardamon jest prawdopodobnie: isinstance(x, type(None))
Jak mogę zakwestionować zmienną, która jest typu NoneType? Muszę użyć metody if
Używanie isinstance()nie wymaga iswewnątrz if-statement:
if isinstance(x, type(None)):#do stuff
Informacje dodatkowe
Można również sprawdzić, czy w jednym isinstance()wyciągu jest wiele typów, jak wspomniano w dokumentacji . Po prostu napisz typy jako krotkę.
Ponieważ nie można podklasować, NoneTypea ponieważ Nonejest to singleton, isinstancenie należy go używać do wykrywania None- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyć is Nonelub is not None.
Aaron Hall
1
Ta odpowiedź była przydatna dlapython 3.6.7
Santhosh Dhaipule Chandrakanth,
@AaronHall Dlaczego isinstancenie należy używać? Rozumiem, że isnależy to preferować, ale są przypadki, w których formularz isinstance wydaje się bardziej naturalny (np. Sprawdzanie wielu typów jednocześnie isinstance(x, (str, bool, int, type(None)))). Czy to tylko osobiste preferencje, czy jest jakieś zastrzeżenie, którego nie jestem świadomy?
Conchylicultor
@ Conchylicultor wady Twojej sugestii: 1. globalne wyszukiwanie dla type2., a następnie wywołanie go 3. następnie wyszukiwanie typu None- kiedy Nonejest singletonem i słowem kluczowym. Kolejny minus: 4. jest to bardzo niestandardowe i podniesie brwi, gdy ludzie patrzą na twój kod. x is Nonejest bardziej zoptymalizowanym czekiem. Sugerowałbym x is None or isinstance(x, (str, bool, int))- ale sugerowałbym również, abyś pomyślał więcej o tym, co robisz, gdy robisz tego rodzaju sprawdzanie typów, które nie mają ze sobą wiele wspólnego ...
Aaron Hall
4
Nie jestem pewien, czy to odpowiada na pytanie. Ale wiem, że zrozumienie tego zajęło mi trochę czasu. Przeglądałem stronę internetową i nagle nie było już nazwiska autorów. Potrzebowałem więc wyciągu z czeku.
if type(author)== type(None):
my if body
else:
my else body
Autor może być dowolną zmienną w tym przypadku i Nonemoże być dowolnego typu, którego szukasz.
Ponieważ Nonejest to singleton, typenie należy go używać do wykrywania None- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyć is Nonelub is not None.
Ponieważ nie można podklasować, NoneTypea ponieważ Nonejest to singleton, isinstancenie należy go używać do wykrywania None- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyć is Nonelub is not None.
Aaron Hall
Oh ok Dzięki !
Pesko,
0
Mam nadzieję, że ten przykład będzie dla ciebie pomocny)
print(type(None)# NoneType
Możesz więc sprawdzić typ nazwy zmiennej
#Example
name =12# name = Noneif type(name)!= type(None):print(name)else:print("Can't find name")
None
jest to jedyna wartość, którą zwraca metoda, dla którejbool(returnValue)
jest równaFalse
, toif not new:
powinna działać dobrze. Zdarza się to czasami we wbudowanych bibliotekachre.match
lib - na przykład zwraca wartość Brak lub obiekt zgodny z prawdą.null
iNone
w Pythonie tutaj .Odpowiedzi:
Użyj
is
operatora, tak jak toDlaczego to działa?
Ponieważ
None
jest to jedyny obiekt typu singletonNoneType
w Pythonie, możemy użyćis
operatora do sprawdzenia, czy zmienna maNone
w sobie czy nie.Cytując z
is
dokumentów ,Ponieważ może istnieć tylko jedna instancja
None
,is
byłby to preferowany sposób sprawdzeniaNone
.Usłysz to z pyska konia
Cytując Wytyczne dotyczące stylu kodowania Pythona - PEP-008 (wspólnie zdefiniowane przez samego Guido),
źródło
== None
iis None
?None
, oba przyniosą podobny wynik.pandas
DataFrame istnieje - w tymtype(df) is type(None)
celuThe truth value of a DataFrame is ambiguous
źródło
Można to również zrobić
isinstance
zgodnie z odpowiedzią Alexa Halla :isinstance
jest również intuicyjny, ale istnieje komplikacja, że wymaga liniiNoneType = type(None)
co nie jest potrzebne dla typów takich jak
int
ifloat
.źródło
NoneType
a ponieważNone
jest to singleton,isinstance
nie należy go używać do wykrywaniaNone
- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyćis None
lubis not None
.Jak zauważył komentarz Aarona Halla:
Oryginalna odpowiedź:
Najprostszym sposobem jednak bez dodatkowej linii oprócz odpowiedzi na kardamon jest prawdopodobnie:
isinstance(x, type(None))
Używanie
isinstance()
nie wymagais
wewnątrzif
-statement:Informacje dodatkowe
Można również sprawdzić, czy w jednym
isinstance()
wyciągu jest wiele typów, jak wspomniano w dokumentacji . Po prostu napisz typy jako krotkę.źródło
NoneType
a ponieważNone
jest to singleton,isinstance
nie należy go używać do wykrywaniaNone
- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyćis None
lubis not None
.python 3.6.7
isinstance
nie należy używać? Rozumiem, żeis
należy to preferować, ale są przypadki, w których formularz isinstance wydaje się bardziej naturalny (np. Sprawdzanie wielu typów jednocześnieisinstance(x, (str, bool, int, type(None)))
). Czy to tylko osobiste preferencje, czy jest jakieś zastrzeżenie, którego nie jestem świadomy?type
2., a następnie wywołanie go 3. następnie wyszukiwanie typuNone
- kiedyNone
jest singletonem i słowem kluczowym. Kolejny minus: 4. jest to bardzo niestandardowe i podniesie brwi, gdy ludzie patrzą na twój kod.x is None
jest bardziej zoptymalizowanym czekiem. Sugerowałbymx is None or isinstance(x, (str, bool, int))
- ale sugerowałbym również, abyś pomyślał więcej o tym, co robisz, gdy robisz tego rodzaju sprawdzanie typów, które nie mają ze sobą wiele wspólnego ...Nie jestem pewien, czy to odpowiada na pytanie. Ale wiem, że zrozumienie tego zajęło mi trochę czasu. Przeglądałem stronę internetową i nagle nie było już nazwiska autorów. Potrzebowałem więc wyciągu z czeku.
Autor może być dowolną zmienną w tym przypadku i
None
może być dowolnego typu, którego szukasz.źródło
None
jest to singleton,type
nie należy go używać do wykrywaniaNone
- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyćis None
lubis not None
.Python 2.7:
lub
==> Prawda
źródło
NoneType
a ponieważNone
jest to singleton,isinstance
nie należy go używać do wykrywaniaNone
- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyćis None
lubis not None
.Mam nadzieję, że ten przykład będzie dla ciebie pomocny)
Możesz więc sprawdzić typ nazwy zmiennej
źródło