Python O Valor None

Às vezes um programa precisa dizer "aqui não tem nada": o cliente não deixou telefone, a promoção ainda não tem desconto definido, a busca não achou ninguém. Para isso, o Python tem um valor especial, o None (em inglês, "nenhum"). Ele não é zero, não é um texto vazio, não é falso: é a ausência de valor. Nesta aula você vai ver como usá-lo, como perguntar se uma variável está "vazia" desse jeito e por que tanta mensagem de erro fala em NoneType.

Você vai aprender
  • O que é o None e qual é o tipo dele, o NoneType.
  • Quando usar None: o valor que "ainda não existe" ou "não foi informado".
  • Por que None não é 0, nem "", nem False.
  • A perguntar "é None?" com is None.
  • Por que o modo interativo não mostra nada quando o resultado é None.
  • Onde o None aparece sem você pedir: o print() devolve None.
  • Os erros reais com NoneType, os mais comuns do Python.

Os programas desta aula rodaram no Python 3.14 da máquina da Ana (usuária ana, computador notebook), e podem ser repetidos no editor do guia.


A ideia: o campo em branco da ficha

A padaria guarda uma ficha de cada cliente que encomenda bolo. Na ficha da Dona Lúcia, o campo "Telefone" ficou em branco: ela não quis informar. Repare: em branco não é "telefone zero" nem "telefone falso". É "sem telefone", uma informação que não existe.

Na ficha de papel, você deixa o espaço vazio. No Python, você escreve None:

ValorO que dizNa ficha
0Um número: zero"Encomendou 0 bolos"
""Um texto, só que vazio"Apelido: (escreveu nada)"
FalseUma resposta: não"Cliente VIP? Não"
NoneNenhum valor"Telefone: (sem informação)"

1. Escrevendo None

nome = "Dona Lúcia"
telefone = None
print(nome)
print(telefone)
print(type(telefone))
$ python3 ficha.py
Dona Lúcia
None
<class 'NoneType'>
telefone = None
A variável existe, mas guarda "nada". Assim o programa registra que o telefone não foi informado.
None
Com N maiúsculo e sem aspas, como True e False. É uma palavra reservada do Python.
print(telefone) → None
O print mostra a palavra None para você saber que ali não há valor.
<class 'NoneType'>
O tipo do None se chama NoneType ("tipo do nenhum"). É um tipo com um valor só: o próprio None. Você vai ver esse nome em muitas mensagens de erro.

O modo interativo não mostra o None

No modo interativo (aula O Modo Interativo), o Python mostra o resultado de tudo o que você digita, menos quando o resultado é None:

$ python3 -q
>>> None
>>> print(None)
None
>>> telefone = None
>>> telefone
>>> type(None)
<class 'NoneType'>

Digitar None ou telefone não mostrou nada: para o modo interativo, "nada" não precisa ser mostrado. Para ver, peça com print(). Se um dia você digitar algo no >>> e não aparecer resposta nenhuma, o resultado provavelmente foi None.


2. None não é zero, nem vazio, nem falso

O None é diferente de todos os outros valores "pequenos":

$ python3 -q
>>> None == 0
False
>>> None == ""
False
>>> None == False
False
>>> bool(None)
False

As três primeiras perguntas mostram que None não é igual a 0, nem a "", nem a False. Mas a última mostra que, quando o Python precisa de um "sim ou não", o None conta como falso: ele é falsy, como o zero e o texto vazio (aula Booleanos).

Por que a diferença importa? Pense no desconto da padaria. "Desconto 0" quer dizer "o desconto foi decidido e é zero". "Desconto None" quer dizer "ninguém decidiu o desconto ainda". São situações diferentes, e o programa pode precisar tratá-las de jeitos diferentes.


3. Perguntando "é None?": is None

Para saber se uma variável guarda None, o costume do Python é usar is None ("é nenhum"):

desconto = None
print(desconto is None)
desconto = 0
print(desconto is None)
print(desconto == 0)
$ python3 desconto.py
True
False
True
desconto is None
"O desconto é o None?" Na primeira vez, sim: True.
desconto = 0
Agora alguém decidiu: o desconto é zero.
desconto is None → False
Zero não é None.
desconto == 0 → True
Mas é igual a zero.

O contrário é is not None ("não é nenhum"): telefone is not None responde True quando o telefone foi informado. O is tem aula própria, is e in, que explica por que ele é o certo para o None e o == é o certo para o resto.

FormaQuando usar
telefone is NoneSempre que a pergunta for "é None?". É a forma recomendada pelo guia de estilo do Python (aula PEP 8)
telefone is not None"Tem valor?"
telefone == NoneFunciona quase sempre, mas não é o costume. Evite
not telefoneCuidado: dá True para None, mas também para 0 e "". Use só quando você quer tratar todos os "vazios" do mesmo jeito

Missão: a ficha do Seu Joaquim está sem telefone, mas o programa para com NameError. Conserte o valor que quer dizer "nada".

telefone = none
print("Telefone:", telefone)
telefone = None
print("Telefone:", telefone)

4. Onde o None aparece sem você pedir

Toda função do Python devolve alguma coisa. As que fazem um trabalho e não têm nada para devolver, como o print(), devolvem None. O print mostra o texto na tela, mas não entrega nada de volta:

resultado = print("Bom dia!")
print(resultado)
$ python3 retorno_print.py
Bom dia!
None

A linha 1 mostrou "Bom dia!" e guardou na variável o que o print devolveu: None. Parece bobagem, mas é a origem de um erro muito comum. A Ana queria calcular o preço de 2 pães de queijo e somar a taxa de entrega:

preco = 4.5
total = print(preco * 2)
print("Total com taxa:", total + 1)
$ python3 total_print.py
9.0
Traceback (most recent call last):
  File "/home/ana/total_print.py", line 3, in <module>
    print("Total com taxa:", total + 1)
                             ~~~~~~^~~
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

O 9.0 apareceu (o print mostrou a conta), mas o total ficou com None, e somar None + 1 não existe. O conserto é guardar a conta, e não o print:

preco = 4.5
total = preco * 2
print(total)
print("Total com taxa:", total + 1)
$ python3 total_certo.py
9.0
Total com taxa: 10.0

Quando você criar as suas próprias funções (aula return), vai ver que uma função sem return também devolve None.


5. Para que usar None

SituaçãoExemplo
Informação que não foi dadatelefone = None
Valor que ainda vai ser calculado ou decididodesconto = None, maior_nota = None
"Não encontrei"Uma busca que devolve None quando não acha (você vai ver isso em Dicionários, com o .get())
Função que só faz um trabalhoprint() devolve None

Quando dá errado

Os erros com NoneType estão entre os mais comuns do Python. Quase sempre a causa é a mesma: uma variável que você achava que tinha um valor tem None. Quando aparecer NoneType numa mensagem, pergunte: "de onde veio esse None?".

Fazer conta com None: TypeError: unsupported operand type(s)
telefone = None
print(telefone + 1)
$ python3 none_mais.py
Traceback (most recent call last):
  File "/home/ana/none_mais.py", line 2, in <module>
    print(telefone + 1)
          ~~~~~~~~~^~~
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
line 2
O erro está na linha 2.
~~~~~~~~~^~~
Os tils marcam os dois lados da conta, e o chapeuzinho, o +.
TypeError
"Erro de tipo".
unsupported operand type(s) for +
"Tipos de operando não suportados para +": o + não sabe trabalhar com esses tipos.
'NoneType' and 'int'
Do lado esquerdo havia um NoneType (o None) e, do lado direito, um int (o 1).

Como consertar: descubra por que a variável tinha None. Foi guardado o resultado de um print? Faltou dar o valor? Se o None é esperado (telefone não informado), pergunte com is None antes de usar.

Usar None como texto: TypeError e AttributeError
apelido = None
print(len(apelido))
$ python3 none_len.py
Traceback (most recent call last):
  File "/home/ana/none_len.py", line 2, in <module>
    print(len(apelido))
          ~~~^^^^^^^^^
TypeError: object of type 'NoneType' has no len()

"Objeto do tipo NoneType não tem len()". O len() conta as letras de um texto (aula Strings), mas o None não tem letras para contar. O mesmo acontece ao chamar um método de texto:

apelido = None
print(apelido.upper())
$ python3 none_upper.py
Traceback (most recent call last):
  File "/home/ana/none_upper.py", line 2, in <module>
    print(apelido.upper())
          ^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'upper'

AttributeError é "erro de atributo": "objeto NoneType não tem o atributo upper". O .upper() deixa um texto em maiúsculas, e o None não é texto. Como consertar: se o apelido pode faltar, guarde "" (texto vazio, que tem len 0 e aceita .upper()) ou confira com is None antes.

none com minúscula: NameError
telefone = none
print("Telefone:", telefone)
$ python3 none_minusculo.py
Traceback (most recent call last):
  File "/home/ana/none_minusculo.py", line 1, in <module>
    telefone = none
               ^^^^
NameError: name 'none' is not defined. Did you mean: 'None'?

Como com o true da aula Booleanos: none, com minúscula, parece o nome de uma variável que não existe, e o Python sugere 'None'. Quem vem de outras linguagens costuma escrever null ou nil, e o resultado é o mesmo NameError. Como consertar: None, com N maiúsculo.

"None" entre aspas

Com aspas, "None" é um texto de quatro letras, e não o "nada". O print mostra os dois do mesmo jeito, mas "None" is None é False. (No modo interativo, o Python ainda avisa: SyntaxWarning: "is" with 'str' literal. Did you mean "=="?, porque usar is com um texto escrito no código quase sempre é engano.) Como consertar: None, sem aspas.


Referência rápida

EscritaResultadoObservação
x = Nonex sem valorN maiúsculo, sem aspas
type(None)<class 'NoneType'>O tipo que só tem o None
x is NoneTrue ou FalseA forma certa de perguntar
x is not NoneTrue ou False"Tem valor?"
None == 0, None == "", None == FalseFalseNone não é nenhum deles
bool(None)FalseNone é falsy
print(…)devolve NoneMostra, mas não entrega valor
SintomaCausa provável
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'Conta com uma variável que tinha None (muitas vezes, o resultado de um print)
TypeError: object of type 'NoneType' has no len()len() de uma variável com None
AttributeError: 'NoneType' object has no attribute '…'Método chamado numa variável com None
NameError: name 'none' is not defined. Did you mean: 'None'?none, null ou nil: o certo é None
No >>>, nenhuma respostaO resultado foi None: use print() para ver

Exercícios

1. O tipo do nada

Complete o que print(type(None)) mostra:

<class ''>

2. A pergunta certa

Complete para perguntar se o desconto ainda não foi definido:

print(desconto None)

3. Quanto vale None == 0?

4. O que x = print("Oi") guarda em x?

5. Apareceu AttributeError: 'NoneType' object has no attribute 'upper'. O que isso quer dizer?

Missão final: o total que sumiu

Missão: o programa mostra 9.0 e depois para com TypeError, porque a variável total ficou com None. Faça o total guardar a conta, para a última linha mostrar Total com taxa: 10.0.

preco = 4.5
total = print(preco * 2)
print("Total com taxa:", total + 1)
preco = 4.5
total = preco * 2
print("Total com taxa:", total + 1)

Resumo

  • None é o valor que quer dizer "nada", "sem valor", "não informado". Escreve-se com N maiúsculo e sem aspas.
  • O tipo dele é NoneType, que só tem esse valor.
  • None não é 0, nem "", nem False, mas é falsy: bool(None) é False.
  • Para perguntar, use x is None e x is not None.
  • O modo interativo não mostra resultados None; use print().
  • O print() devolve None: guarde a conta, não o print.
  • Erros com NoneType querem dizer que uma variável tinha None quando você esperava um valor. Procure de onde ele veio.