Tratamento de erros em Python com try, except, finally
Lidar com erros é parte essencial do desenvolvimento de software de qualidade e confiável. Mesmo os desenvolvedores mais experientes não estão imunes a erros durante a execução do programa. Para evitar que essas situações causem a falha total da aplicação, o Python oferece ferramentas poderosas para tratamento de exceções.
Neste guia, você aprenderá a usar corretamente as construções try, except e finally para criar código resistente a erros.
Fundamentos do tratamento de exceções em Python
O que é tratamento de erros
O tratamento de erros em Python permite capturar exceções que ocorrem durante a execução do programa. Em vez de encerrar a aplicação abruptamente, o sistema executa ações específicas para lidar corretamente com a situação problemática.
Elementos-chave do sistema de tratamento de exceções
O sistema de tratamento de erros em Python é baseado em três blocos principais:
- try — bloco de código onde uma exceção pode ocorrer
- except — bloco para tratar um tipo específico de erro
- finally — bloco de código executado independentemente do resultado
Estrutura básica da construção try-except-finally
Sintaxe da construção principal
try:
# Código que pode gerar uma exceção
pass
except SpecificError:
# Código para tratar o erro específico
pass
finally:
# Código executado em qualquer caso
pass
Aplicação prática da estrutura básica
try:
user_input = input("Digite um número: ")
number = int(user_input)
print(f"Você digitou o número: {number}")
except ValueError:
print("Erro: é necessário digitar um número válido")
finally:
print("Operação finalizada")
Com uma entrada válida, o programa exibirá o número digitado. Em caso de entrada inválida, uma mensagem de erro será mostrada. O bloco finally será executado em qualquer cenário.
Tratamento de diferentes tipos de exceções
Tratamento múltiplo de erros
O Python permite tratar diferentes tipos de exceções usando vários blocos except:
try:
dividend = 10
divisor = 0
result = dividend / divisor
except ZeroDivisionError:
print("Operação de divisão por zero não é permitida")
except ValueError:
print("Formato de dados inválido detectado")
except TypeError:
print("Tipos de dados incompatíveis para a operação")
finally:
print("Processamento da operação matemática finalizado")
Tratamento de erros sem o bloco finally
O bloco finally não é obrigatório. Sem ele, o programa trata a exceção e continua a execução:
try:
data_list = [1, 2, 3, 4, 5]
element = data_list[10] # Tentativa de acessar índice inexistente
except IndexError:
print("Tentativa de acessar um índice fora dos limites da lista")
Obtendo informações detalhadas sobre exceções
Usando a palavra-chave as
Para obter informações detalhadas sobre a exceção, use a construção com a palavra-chave as:
try:
calculation = 15 / 0
except ZeroDivisionError as error:
print(f"Erro detectado: {error}")
print(f"Tipo do erro: {type(error).__name__}")
Resultado da execução:
Erro detectado: division by zero
Tipo do erro: ZeroDivisionError
Tratamento genérico de todas as exceções
Em alguns casos, é necessário capturar qualquer exceção possível:
try:
potentially_risky_operation()
except Exception as error:
print(f"Ocorreu um erro: {error}")