try e except)O tratamento de exceções usa os blocos try e except para lidar com erros em tempo de execução, permitindo que o programa se recupere e continue.
É crucial capturar a exceção mais específica possível para diagnosticar o problema corretamente.
| Exceção | Quando Ocorre | Exemplo de Código |
|---|---|---|
ValueError |
Quando uma função recebe um argumento com o tipo correto, mas com um valor inapropriado. | Tentar converter uma string que não é um número para um inteiro: int("texto"). |
ZeroDivisionError |
Quando o denominador de uma operação de divisão é zero. | A operação matemática 10 / 0. |
Exception |
A classe base para a maioria das exceções. Usada para capturar qualquer erro não especificado. | Usar except Exception as e: é um bom método de segurança, mas deve ser usado após tentar capturar erros específicos. |
Exemplo 1: ValueError (Valor Inapropriado)
Esta exceção ocorre quando o tipo de dado é correto (ex: estamos usando str com int()), mas o valor da string não pode ser convertido (ex: "olá" não pode virar um número).
def tratar_value_error():
print("\\n--- Exemplo 1: ValueError ---")
entrada = input("Digite sua idade (apenas números): ")
try:
# Tenta converter a entrada (str) em um número inteiro (int)
idade = int(entrada)
print(f"Idade válida salva: {idade} anos.")
except ValueError:
# É capturado se a entrada for, por exemplo, "vinte" ou "30a"
print("ERRO DE VALOR: A entrada não pôde ser convertida para um número inteiro.")
print("Tente novamente digitando apenas dígitos.")
def main():
tratar_value_error()
if __name__ == "__main__":
main()
Exemplo 2: ZeroDivisionError (Divisão por Zero)
Esta é uma exceção puramente matemática. Ocorre quando o denominador de uma divisão é zero.
def tratar_zero_division_error():
print("\\n--- Exemplo 2: ZeroDivisionError ---")
try:
num1 = 10
num2 = 0
# O código falha aqui, pois a divisão por zero é indefinida
resultado = num1 / num2
print(f"Resultado: {resultado}") # Esta linha nunca será executada
except ZeroDivisionError:
# É capturado se ocorrer a divisão por zero
print(f"ERRO DE DIVISÃO: A operação {num1} / {num2} é inválida.")
print("A divisão por zero não é permitida.")
def main():
tratar_zero_division_error()
if __name__ == "__main__":
main()
Exemplo 3: IndexError (Índice Inválido)
Embora você tenha pedido Exception, vamos usar um erro muito comum (IndexError) e depois mostrar como Exception pode capturá-lo de forma genérica.