Artigo

Exceções em Python: guia completo para concursos

Seja para as carreiras de Tecnologia da Informação ou para cargos que exigem Ciência de Dados, Python deixou de ser um diferencial para se tornar um requisito básico. É necessário conhecer diversos aspectos da linguagem. Tratamento de exceções está entre os tópicos mais cobrados nas questões sobre Python nos concursos públicos mais recentes.

Neste artigo, vamos explorar os seguintes tópicos:

  • O que são exceções e por que tratá-las
  • A estrutura try/except e suas diferenças em relação a outras linguagens
  • Os blocos else e finally
  • A instrução raise
  • Hierarquia de exceções e a ordem dos blocos except
  • Boas práticas cobradas em provas
  • Questões de concursos comentadas
Tratamento de exceções Python

O que são exceções?

Quando um programa encontra uma situação inesperada durante sua execução, como uma divisão por zero ou a leitura de um arquivo inexistente, o Python levanta uma exceção. Se ela não for tratada, o programa é interrompido abruptamente e uma mensagem de erro é exibida.

O tratamento de exceções permite que o código continue funcionando de forma controlada mesmo diante dessas situações. É, portanto, uma prática essencial no desenvolvimento de software robusto.

A estrutura try/except

A estrutura principal para o tratamento de exceções em Python é o bloco try/except. Vale destacar que, diferentemente de linguagens como Java e C++, que utilizam try/catch, o Python usa try/except.

Veja a estrutura básica:

try:
    resultado = 10 / 0
except ZeroDivisionError:
    print(“Divisão por zero não é permitida.”)

Nesse exemplo, o bloco try contém o código que gera uma exceção. Como a exceção do tipo ZeroDivisionError é lançada, o bloco except correspondente é executado.

O bloco else

Muitas questões de concurso exploram o comportamento do bloco else dentro de uma estrutura de tratamento de exceções. É fundamental fixar a seguinte regra:

O bloco else só é executado se nenhuma exceção ocorrer dentro do bloco try.

try:
    resultado = 10 / 2
except ZeroDivisionError:
    print(“Erro!”)
else:
    print(“Tudo certo:”, resultado)

Neste caso, como não há erro, o bloco else será executado e exibirá Tudo certo: 5.0. Se uma exceção fosse lançada, o else seria ignorado.

O bloco finally

O bloco finally possui um comportamento diferente: ele é sempre executado, independentemente de ter ocorrido uma exceção ou não. Isso o torna ideal para operações de limpeza, como fechar conexões ou liberar recursos.

try:
    arquivo = open(“dados.txt”, “r”)
except FileNotFoundError:
    print(“Arquivo não encontrado.”)
finally:
    print(“Operação finalizada.”)

Mesmo que o arquivo não seja encontrado, a mensagem “Operação finalizada.” sempre será exibida. Este comportamento do finally é bastante explorado em provas de concurso.

A instrução raise

Para forçar o lançamento de uma exceção, usamos a instrução raise — e não exception, como alguns candidatos erroneamente acreditam. A instrução exception não existe em Python para essa finalidade. Também não se usa throw, instrução que é válida em outras linguagens, como Java.

def verificar_idade(idade):
    if idade < 0:
        raise ValueError(“Idade não pode ser negativa.”)
    return idade

A instrução raise lança uma exceção que deverá ser capturada pelo bloco chamador, caso necessário. Questões de concurso frequentemente testam esse ponto ao afirmar, incorretamente, que “o comando exception força a ocorrência de uma exceção”. O correto é raise.

Hierarquia de exceções e ordem dos blocos except

Python organiza suas exceções em uma hierarquia de herança. A classe Exception é a classe-mãe da maioria das exceções embutidas. Isso tem um impacto direto na forma como os blocos except devem ser ordenados.

Regra importante: exceções mais específicas devem ser declaradas antes das mais genéricas. Caso contrário, o bloco mais genérico capturará todas as exceções antes que o específico tenha chance de ser avaliado.

Veja um exemplo problemático:

try:
    arquivo = open(“config.txt”)
except Exception as e:
    print(“Falha genérica:”, e)
except FileNotFoundError as e:  # Nunca será alcançado!
    print(“Arquivo ausente:”, e)

Neste código, o bloco except FileNotFoundError jamais será executado, pois Exception captura todas as exceções antes dele, incluindo FileNotFoundError, que herda de Exception. A ordem correta seria inversa: primeiro FileNotFoundError, depois Exception.

Múltiplos except no mesmo try

É totalmente válido ter múltiplos blocos except em um mesmo try. Isso permite tratar diferentes tipos de erros de forma específica, que é apontada pelas bancas como uma das principais vantagens do tratamento de exceções.

try:
    numero = int(input(“Digite um número: “))
    resultado = 10 / numero
except ValueError:
    print(“Entrada inválida. Digite um número válido.”)
except ZeroDivisionError:
    print(“Divisão por zero não permitida.”)

Esse padrão oferece mensagens de erro específicas para cada situação, melhorando a experiência do usuário e facilitando a manutenção do código.

Boas práticas sobre exceções cobradas em provas

Algumas práticas relacionadas ao tratamento de exceções aparecem com frequência nas questões:

  • Usar try/except com registro de logs é apontado como boa prática para sistemas em produção.
  • O bloco finally deve ser usado para garantir o encerramento de recursos (arquivos abertos, conexões de banco de dados abertas) mesmo que ocorra uma exceção.
  • Não usar assert como substituto ao tratamento de exceções em produção.

Questões de concurso comentadas

Questão 1:
“Na linguagem de programação Python, considerando que o comando else está alinhado aos comandos try e except, o escopo do comando else:”

Resposta correta: só será processado se não ocorrer nenhuma exceção durante o processamento do escopo do comando try. Atenção: o else não é executado quando a exceção ocorre. É justamente o oposto do que muitos candidatos imaginam.

Questão 2:
“Considere a linguagem Python 3.0: a estrutura usada para tratar exceções e erros com elegância, garantindo que o programa continue em execução mesmo quando algo der errado, se chama:”

Resposta correta: try..except. A alternativa try..catch é típica de Java, não de Python. Essa distinção entre linguagens é um ponto clássico de pegadinha nas provas.

Conclusão

O tratamento de exceções em Python é um tema com alto índice de cobrança em concursos públicos de TI. Os pontos mais explorados pelas bancas são: a sintaxe try/except (e não try/catch), o comportamento dos blocos else e finally, a instrução raise, e a ordem correta dos blocos except conforme a hierarquia de classes.

https://www.geeksforgeeks.org/python/python-exception-handling

https://wiki.python.org/python/HandlingExceptions.html

Concursos Abertos

Concursos 2026