Eu tenho um método que às vezes retorna um valor NoneType. Então, como posso questionar uma variável que é um NoneType? Eu preciso usar o método if , por exemplo
if not new:
new = '#'
Sei que é o caminho errado e espero que você entenda o que eu quis dizer.
None
é o único valor que seu método retorna para o qualbool(returnValue)
é igualFalse
, entãoif not new:
deve funcionar bem. Às vezes, isso ocorre nas bibliotecas internas - por exemplo,re.match
retorna Nenhum ou um objeto de correspondência verdade.null
eNone
em python aqui .Respostas:
Usar
is
operador, assimPor que isso funciona?
Como
None
é o único objeto singleton doNoneType
Python, podemos usar ois
operador para verificar se uma variável possuiNone
ou não.Citando
is
documentos ,Como só pode haver uma instância de
None
,is
seria a maneira preferida de verificarNone
.Ouça da boca do cavalo
Citando as Diretrizes de estilo de codificação do Python - PEP-008 (definidas em conjunto pelo próprio Guido),
fonte
== None
eis None
?None
, ambos produzirão resultados semelhantes.pandas
existe um DataFrame - para isso, eutype(df) is type(None)
The truth value of a DataFrame is ambiguous
fonte
Ele também pode ser feito com
isinstance
de acordo com a resposta de Alex Hall :isinstance
também é intuitivo, mas há a complicação de exigir a linhaNoneType = type(None)
o que não é necessário para tipos como
int
efloat
.fonte
NoneType
e comoNone
é um singleton,isinstance
não deve ser usado para detectarNone
- em vez disso, faça o que a resposta aceita diz e useis None
oris not None
.Como apontado pelo comentário de Aaron Hall:
Resposta original:
A maneira mais simples, no entanto, sem a linha extra, além da resposta do cardamomo, é provavelmente:
isinstance(x, type(None))
O uso
isinstance()
não requer umis
dentro daif
declaração:Informações adicionais
Você também pode verificar vários tipos em uma
isinstance()
instrução, conforme mencionado na documentação . Basta escrever os tipos como uma tupla.fonte
NoneType
e comoNone
é um singleton,isinstance
não deve ser usado para detectarNone
- em vez disso, faça o que a resposta aceita diz e useis None
oris not None
.python 3.6.7
isinstance
que não deve ser usado? Entendo que issois
deve ser preferido, mas há alguns casos em que o formulário isinstance parece mais natural (como verificar vários tipos ao mesmo tempoisinstance(x, (str, bool, int, type(None)))
). É apenas uma preferência pessoal ou há uma ressalva que eu não conheço?type
2., em seguida, chamando-a 3. e, em seguida, pesquisando o tipo deNone
- quandoNone
é um singleton e uma palavra-chave. Outra desvantagem: 4. isso é muito fora do padrão e levanta as sobrancelhas quando as pessoas estão olhando para o seu código.x is None
é uma verificação mais otimizada. Eu sugeririax is None or isinstance(x, (str, bool, int))
- mas também sugeriria que você pensasse mais sobre o que está fazendo quando faz esse tipo de verificação de tipo para tipos que não têm muito em comum ...Não tenho certeza se isso responde à pergunta. Mas sei que demorei um pouco para descobrir. Eu estava percorrendo um site e, de repente, o nome dos autores não estava mais lá. Então, precisava de uma declaração de cheque.
O autor pode ser qualquer variável nesse caso e
None
pode ser de qualquer tipo que você está verificando.fonte
None
é um singleton,type
não deve ser usado para detectarNone
- você deve fazer o que a resposta aceita diz e usaris None
oris not None
.Python 2.7:
ou
==> Verdadeiro
fonte
NoneType
e comoNone
é um singleton,isinstance
não deve ser usado para detectarNone
- em vez disso, faça o que a resposta aceita diz e useis None
oris not None
.Espero que este exemplo seja útil para você)
Então, você pode verificar o tipo do nome da variável
fonte