Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender o bloco try-catch
  2. Entender como capturar mais de uma exceção
  3. Entender o bloco finally
  4. Comando With

A linguagem Python possui um recurso para tratamento de erro em que podemos definir um bloco de código para que seja testado. Caso algum erro ocorra, uma exceção será retornada para que possamos fazer o devido tratamento.

Nesta parte do tutorial, vamos estudar os blocos try, except e finally que respectivamente testam, tratam e finalizam um bloco de código.

Para o tratamento de erros mencionada acima, Python fornece os comando try e except que devem ser usados em conjunto.

Sintaxe
try:
 #código que será testado
except nome_excecao
 #código para tratamento de erro
Onde
try: possui um corpo de código que será executado
except: comando para capturar erro lançado em try.
nome_excecao: tipo de dado da exceção lançada, nativa ou do criada pelo usuário

Quando o try é utilizado, as declarações dentro do corpo/bloco são executadas. Caso algum erro ocorra, uma Exceção(Exception) é gerada e o fluxo de execução é desviado para o bloco except que deve realizar o devido tratamento da exceção.

Exemplo 1
try:
    print(1/0)
except ZeroDivisionError: #divisão por 0
    print("Erro: ZeroDivisionError")
Saída
Erro: ZeroDivisionError

O bloco except é alimentado por um objeto que contem as informações sobre a exceção ocorrida como mensagem, linha do erro, stacktrace e outros.

A linguagem Python, além das diversas exceções nativas, permite a criação de exceções customizadas com atributos e métodos próprios.

Como o bloco try pode conter várias declarações de código que podem gerar diferentes tipos de exceções. É possível capturar diferentes exceções sequencialmente. Isso é feito declarando um bloco except para cada tipo de possível exceção.

Sintaxe
try:
 #código que será testado
except nome_excecao1
 #código para tratamento de erro
except nome_excecao2
 #código para tratamento de erro
except nome_excecao3
 #código para tratamento de erro
Exemplo 2
try:
    print(1/0)
    print(a)
except ZeroDivisionError: #divisão por 0
    print("Erro: ZeroDivisionError")
except NameError: # variável não declarada
    print("Erro: NameError")
Saída
Erro: ZeroDivisionError

Os blocos exception devem ser declarados a partir das exceptions menos genéricas até mais genéricas, para que a exception lançada no bloco try não seja capturada de forma errada.

Exemplo 3
try:
    print(1/0)
    print(a)
    #outra exception
except ZeroDivisionError: #divisão por 0
    print("Erro: ZeroDivisionError")
except NameError: # variável não declarada
    print("Erro: NameError")
except e:
    pass #exceção mais genérica
Saída
-

Quando precisamos executar algum tipo de tratamento independente se nossas declarações dentro do try, utilizamos o bloco finally.

Após a execução do try ou except, ocorrendo ou não uma exceção, o fluxo de execução é desviado para o bloco finally.

Sintaxe
try:
	#código p/ teste
except nome_exception as nome_variavel:
	#tratamento aqui
finally:
	#liberação de recursos

O bloco finally, normalmente, é utilizado para liberar recursos como alocação de memória, arquivos físicos e outros que são utilizados no bloco try.

Exemplo 5
try:
    print(a/0)
except ZeroDivisionError: #divisão por 0
    print("Erro: ZeroDivisionError")
except NameError as e: # variável não declarada
    print("Erro: NameError", e.__class__)
finally:
    print("Recursos liberados!")
Saída
Erro: NameError 
Recursos liberados!

Python possui o comando with que realiza implicitamente o gerenciamento de memória, recursos e exceções quando trabalhamos com arquivo, alocação de memória, conexões com banco de dados ou semelhantes.

Com o uso de with fica garantido que ao final de seu bloco de código, os recursos utilizados sejam liberados ao ocorrer um erro sem a utilização de try-catch-finally.

Sintaxe
with declaração as nome_variavel:
       #corpo
Onde
declaração: função para abertura de arquivo, conexão ou outro.
Exemplo 6
with open("arq.txt") as arq:
    conteudo = arq.read()
    print(conteudo)  # Print file content
#recursos de memória e arquivo liberados
Saída
-
  1. 09/06/2025 - revisão 2 - adição de comando with
  2. 18/09/2024 - revisão 1 - Ajustes gramaticais; outros ajustes
  3. 19/02/2024 - versão inicial