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:
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 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.
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 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.
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.
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.
É 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.
Algumas práticas relacionadas ao tratamento de exceções aparecem com frequência nas questões:
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.
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
O Estratégia realiza semanalmente aulas, eventos, entrevistas, simulados, revisões e maratonas dos principais concursos públicos.…
Atualmente, TRT PI conta com 12 cargos vagos para Analistas e Técnicos O Tribunal Regional…
Orçamento para 2026 prevê mais de 47 mil provimentos para nomeações e novos concursos federais…
Os concursos da região Sul do país oferecem diversas oportunidades aos concurseiros. Apesar de ser…
Quer ficar por dentro de todos os concursos fiscais de âmbito municipal (ISS) previstos para…
Novo concurso Detran RN oferta 80 vagas + CR, com provas em 31 de maio;…