✅ Artigo atualizado em Setembro 2026 Corrigimos quais cláusulas são obrigatórias: o
tryprecisa de pelo menos umexceptou de umfinally(otry/finallysemexcepté válido), com exemplo.
Salve salve Pythonistas!
Nem sempre os programas que desenvolvemos fazem aquilo que queremos, não é mesmo?
Quem nunca supôs que determinada função iria retornar um dado de certo tipo, e se surpreendeu quando viu que o tipo de retorno era outro? ![]()
Ou quem nunca fez uma conversão de tipos de maneira incorreta e teve um ValueError sendo lançado? ![]()
Por esses e outros motivos que devemos sempre tratar as exceções, programando de forma defensiva em Python!
E para isso, utilizamos o bloco try/except.
Na verdade, é o bloco try/except/else/finally.
Mas calma que veremos tudo nesse post!
Então sem enrolação, já prepara o café e bora nessa! ![]()
Vá direto ao assunto…
Tratar exceções direito é o tipo de detalhe que separa código amador de código profissional - e é esse cuidado que a gente reforça, do básico ao avançado, na Jornada Python:
O tratamento de exceções no Python
O bloco básico de código que realiza o tratamento de exceções no Python é feito da seguinte forma:
1
2
3
4
5
6
7
8
9
10
11
try:
# Bloco de código a ser executado
except {exceção}:
# Código que será executado caso a {exceção} seja capturada
else:
# Código que será executado caso nenhuma exceção tenha sido lançada ou capturada
finally:
# Código que será executado independente se alguma exceção for capturada ou não
O try é obrigatório e precisa vir acompanhado de pelo menos uma cláusula except ou de uma cláusula finally. O else é opcional, mas só pode ser usado quando existe pelo menos um except.
Ou seja, um try com finally e sem nenhum except é perfeitamente válido. Ele não trata o erro, mas garante que o código de limpeza rode mesmo quando uma exceção acontece:
1
2
3
4
5
6
7
8
9
10
11
12
13
def dividir(a, b):
try:
return a / b
finally:
print('Bloco finally executado')
print(dividir(10, 2))
try:
dividir(1, 0)
except ZeroDivisionError as erro:
print(f'Erro tratado fora da função: {erro}')
A saída será:
1
2
3
4
Bloco finally executado
5.0
Bloco finally executado
Erro tratado fora da função: division by zero
Repare que, na segunda chamada, o finally roda e a exceção ZeroDivisionError continua subindo até ser capturada pelo except de fora. Já um try sozinho, sem except nem finally, gera SyntaxError.
Podemos ter múltiplas cláusulas except, capturando Exceções diferentes.
Mas vamos primeiro aos exemplos para facilitar seu entendimento!
Está curtindo esse conteúdo? ![]()
Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?
Exemplos de utilização
Suponha que você queira abrir um arquivo e caso ele não exista, seu programa irá criá-lo (se precisar revisar o básico, veja como manipular arquivos com Python).
Uma forma de fazer isso seria:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
nome_arquivo = 'nome_arquivo.txt'
try:
arquivo = open(nome_arquivo, 'r')
except FileNotFoundError:
arquivo = open(nome_arquivo, 'a')
else:
print(f"Arquivo {nome_arquivo} já existe")
finally:
# Realiza algum processamento no arquivo
processa_arquivo(arquivo)
# Fecha o arquivo
arquivo.close()
Dessa forma, caso o arquivo não exista, uma exceção FileNotFoundError será lançada e será capturada na cláusula except.
Ali dentro, a função open com o parâmetro “a” (de “append”) será chamada, criando então o arquivo (os modos de escrita estão detalhados no post sobre como escrever em arquivos no Python).
Em seguida, temos a cláusula finally, que será executada independentemente de uma exceção ter sido lançada ou não.
Como se trata de um arquivo, é sempre aconselhado realizar seu fechamento, e um bom lugar para fazer isso é dentro do finally.
Estou desenvolvendo o Ebookr.ai, uma plataforma que transforma suas ideias em ebooks profissionais usando IA - com geração de capa, infográficos e exportação em PDF. Te convido a conhecer!
Capturando múltiplas exceções
Podemos capturar múltiplas exceções de duas formas:
A primeira, com múltiplas cláusulas except, assim (o exemplo lê valores com a função input, que explicamos no post sobre entrada e saída de dados no Python):
1
2
3
4
5
6
7
8
9
10
try:
dividendo = int(input("Digite o dividendo: "))
divisor = int(input("Digite o divisor: "))
resultado = dividendo/divisor
except ValueError:
print("Numero digitado inválido")
except ZeroDivisionError:
print("Divisão por zero não permitida")
Assim, caso o erro ValueError seja lançado, este será capturado pelo primeiro except.
E caso haja uma divisão por zero, a exceção ZeroDivisionError será lançada e capturada pelo segundo except.
Podemos também agrupar exceções! Dessa forma, o mesmo tratamento será dado independente de qual exceção tenha sido lançado, dessa forma:
1
2
3
4
5
6
7
try:
dividendo = int(input("Digite o dividendo: "))
divisor = int(input("Digite o divisor: "))
resultado = dividendo/divisor
except(ZeroDivisionError, ValueError):
print("Erro de conversão ou divisor igual à zero")
Viu como é fácil tratar erros e exceções no Python?!
Agora você não tem mais desculpa para programar da maneira correta!
Conclusão
Nesse post você viu como pode fazer o tratamento de erros e exceções no Python com o bloco try/except e ainda como utilizar as cláusulas else e finally!
Programar de maneira defensiva - capturando e tratando os erros dos programas que desenvolve - é algo que você precisa passar a fazer para progredir como Dev Python!
Quer praticar tratamento de erros e o resto da base de Python construindo projetos guiados? Conheça a Jornada Python, nosso curso de Python completo.
Espero que tenha curtido esse conteúdo e nos vemos na próxima ![]()
"Porque o Senhor dá a sabedoria, e da sua boca vem a inteligência e o entendimento" Pv 2:6