Python fornece blocos específicos para lidar com exceções:
try
:
try
. Se nenhuma exceção ocorrer, ele continua normalmente.try
e procura por um bloco except
correspondente.except TipoDeErro as variavel
:
TipoDeErro
especificado for levantada no bloco try
.ZeroDivisionError
, FileNotFoundError
).variavel
para obter mais detalhes sobre o erro (ex: a mensagem de erro).except
para lidar com diferentes tipos de exceções.except
genérico (sem tipo de erro) captura qualquer exceção, mas isso geralmente não é recomendado porque pode "esconder" erros importantes.else
(Opcional):
try
.try
for bem-sucedida.finally
(Opcional):
Sintaxe Básica:
try:
# Código que pode causar uma exceção
resultado = 10 / 0 # Isso causará um ZeroDivisionError
except ZeroDivisionError:
# Código para lidar com ZeroDivisionError
print("Erro: Divisão por zero não é permitida!")
Exemplo Completo com try
, except
, else
, finally
:
def dividir_numeros(a, b):
try:
# 1. Código que pode causar uma exceção (divisão)
resultado = a / b
except ZeroDivisionError:
# 2. Captura e trata especificamente a divisão por zero
print("Erro: Não é possível dividir por zero!")
return None # Retorna um valor para indicar falha
except TypeError:
# 3. Captura e trata especificamente se os tipos não são numéricos
print("Erro: Certifique-se de que ambos os valores sejam números.")
return None
except Exception as e: # Captura qualquer outra exceção genérica
print(f"Ocorreu um erro inesperado: {e}")
return None
else:
# 4. Este bloco só executa se NENHUMA exceção ocorrer no 'try'
print("Divisão realizada com sucesso!")
return resultado
finally:
# 5. Este bloco SEMPRE executa, com ou sem erro
print("Fim da tentativa de divisão (bloco finally).")
print("--- Teste 1: Divisão por zero ---")
dividir_numeros(10, 0) # Saída: Erro: Não é possível dividir por zero! \\n Fim da tentativa...
print("\\n--- Teste 2: Tipos incorretos ---")
dividir_numeros(10, "2") # Saída: Erro: Certifique-se de que ambos os valores sejam números. \\n Fim da tentativa...
print("\\n--- Teste 3: Operação bem-sucedida ---")
res = dividir_numeros(10, 2)
if res is not None:
print(f"Resultado: {res}") # Saída: Divisão realizada com sucesso! \\n Fim da tentativa... \\n Resultado: 5.0
print("\\n--- Teste 4: Outro erro genérico ---")
# Forçando um erro que não seja ZeroDivisionError nem TypeError
# Exemplo teórico: se 'a' fosse um objeto que não suporta divisão
# Neste caso, 'dividir_numeros(obj_complexo, 2)' poderia cair no 'except Exception as e'