🎯 Exceções em Python

Em poucas palavras

Definição técnica ou simplificada do conceito.


📝 Notas e Desenvolvimento

Em Python, exceções são eventos que ocorrem durante a execução de um programa e interrompem o fluxo normal das instruções. Elas indicam que algo inesperado aconteceu, como um erro de divisão por zero, um arquivo não encontrado ou um erro de tipo. Python oferece mecanismos para lidar com essas exceções, permitindo que você escreva código mais robusto e tolerante a falhas.

Tratamento de Exceções:

A estrutura básica para lidar com exceções é o bloco try…except:

try:
    # Código que pode gerar uma exceção
except TipoDeExcecao:
    # Código para lidar com a exceção
  • try: O bloco try contém o código que você quer monitorar em busca de exceções.
  • except: O bloco except especifica o tipo de exceção que você quer tratar e o código que será executado se essa exceção ocorrer.

Exemplo:

import sys
 
try:
    x = int(input("x: "))
    y = int(input("y: "))
except ValueError:
    print("Error: Invalid input")
    sys.exit(1)
 
try:
    result = x / y
except ZeroDivisionError:
    print("Error: Cannot divide by 0.")
    sys.exit(1)
 
print(f"{x} / {y} = {result}")

Explicação:

  1. Primeiro try…except:
    • Tenta converter a entrada do usuário para inteiros.
    • Se o usuário digitar algo que não pode ser convertido para um inteiro, uma exceção ValueError é levantada.
    • O bloco except ValueError captura essa exceção e imprime uma mensagem de erro.
    • sys.exit(1) encerra o programa com um código de erro.
  2. Segundo try…except:
    • Tenta dividir x por y.
    • Se y for zero, uma exceção ZeroDivisionError é levantada.
    • O bloco except ZeroDivisionError captura essa exceção e imprime uma mensagem de erro.
    • sys.exit(1) encerra o programa com um código de erro.
  3. print(f"{x} / {y} = {result}"): Se nenhuma exceção ocorrer, esta linha imprime o resultado da divisão.

Múltiplos except:

Você pode ter múltiplos blocos except para tratar diferentes tipos de exceções:

try:
    # Código que pode gerar várias exceções
except ValueError:
    # Lida com erros de conversão de tipo
except FileNotFoundError:
    # Lida com erros de arquivo não encontrado
except Exception as e:
    # Lida com qualquer outra exceção (boa prática para tratamento genérico)
    print(f"An error occurred: {e}")

else e finally:

  • else: O bloco else é executado se nenhuma exceção ocorrer no bloco try.
  • finally: O bloco finally é sempre executado, independentemente de uma exceção ter ocorrido ou não. É usado para liberar recursos (como fechar arquivos) ou realizar outras tarefas de limpeza.

Exemplo com else e finally:

try:
    f = open("meu_arquivo.txt", "r")
    conteudo = f.read()
except FileNotFoundError:
    print("Arquivo não encontrado.")
else:
    print(conteudo)
finally:
    if 'f' in locals(): #Verifica se a variavel f foi definida
        f.close()
    print("Finalizando...")

Levantando Exceções:

Você também pode levantar suas próprias exceções usando a palavra-chave raise:

def validar_idade(idade):
    if idade < 0:
        raise ValueError("Idade não pode ser negativa.")
    return True

Dica:

É uma boa prática colocar apenas o código estritamente necessário dentro do bloco try. Isso ajuda a isolar a fonte potencial da exceção e facilita a depuração.

Referências:


🔗 Conexões e Contexto


📚 Referências e Fontes

Citações Diretas