Python Tutorials

Dominando o Tratamento de Exceções em Python

Spread the love

O tratamento de exceções é um componente crítico para a programação robusta em Python. Ele permite que você gerencie erros que possam surgir durante a execução do programa de forma elegante, prevenindo travamentos e fornecendo aos usuários feedback informativo. Este tutorial aborda os conceitos fundamentais do tratamento de exceções em Python.

Sumário

  1. try…except
  2. raise Exception
  3. try…finally
  4. Exceções Integradas Comuns
  5. Criando Exceções Personalizadas

1. try…except

O bloco try...except é a base do tratamento de exceções. O código que pode gerar uma exceção é colocado dentro do bloco try. Se uma exceção ocorrer, o bloco except correspondente é executado.


try:
    result = 10 / 0  # Isso gerará um ZeroDivisionError
except ZeroDivisionError:
    print("Erro: Divisão por zero!")
except TypeError:
    print("Erro: Tipo de dado incompatível")
except Exception as e:  # Captura qualquer outra exceção
    print(f"Ocorreu um erro inesperado: {e}")
else:  # Bloco else opcional, executa se nenhuma exceção ocorrer
    print(f"Resultado: {result}")
finally:  # Bloco finally opcional, sempre executa
    print("Isso sempre executa.")

Este exemplo demonstra o tratamento de um ZeroDivisionError. Múltiplos blocos except podem lidar com diferentes tipos de exceções. O bloco else opcional é executado apenas se nenhuma exceção ocorrer no bloco try. O bloco finally, também opcional, sempre executa, ideal para tarefas de limpeza, como fechar arquivos.

2. raise Exception

A instrução raise permite que você gere exceções explicitamente, sinalizando erros ou condições excepcionais.


def validar_idade(idade):
    if idade < 0:
        raise ValueError("Idade não pode ser negativa")
    elif idade > 120:
        raise ValueError("Idade irrealisticamente alta")
    return idade

try:
    idade = validar_idade(-5)
    print(f"Idade válida: {idade}")
except ValueError as e:
    print(f"Erro: {e}")

Aqui, validar_idade gera um ValueError se a idade for inválida. Você pode gerar qualquer exceção integrada ou criar suas próprias (classes que herdam de Exception).

3. try…finally

O bloco finally garante que o código dentro dele sempre seja executado, independentemente de exceções. É essencial para limpeza.


arquivo = None
try:
    arquivo = open("meu_arquivo.txt", "r")
    conteudo = arquivo.read()
    print(conteudo)
except FileNotFoundError:
    print("Arquivo não encontrado!")
finally:
    if arquivo:
        arquivo.close()
    print("Arquivo fechado.")

Isso garante que o arquivo seja fechado mesmo que um FileNotFoundError ocorra, prevenindo vazamentos de recursos.

4. Exceções Integradas Comuns

Python oferece diversas exceções integradas:

  • ZeroDivisionError: Divisão por zero.
  • TypeError: Tipo inadequado para uma operação.
  • ValueError: Tipo correto, valor inadequado.
  • FileNotFoundError: Arquivo não encontrado.
  • IndexError: Índice fora do intervalo.
  • KeyError: Chave não encontrada em um dicionário.
  • ImportError: Falha na importação.
  • NameError: Nome não encontrado.

5. Criando Exceções Personalizadas

Para um tratamento de erros mais específico, crie exceções personalizadas herdando da classe Exception:


class ErroEntradaInvalida(Exception):
    pass

def processar_dados(dados):
    if not dados:
        raise ErroEntradaInvalida("Dados não podem estar vazios")
    # ...resto do processamento dos dados...

try:
    processar_dados("")
except ErroEntradaInvalida as e:
    print(f"Erro Personalizado: {e}")

Isso permite um tratamento de erros mais granular e melhora a legibilidade do código.

O tratamento eficaz de exceções é vital para escrever programas Python robustos e confiáveis. Ao antecipar e tratar elegantemente erros potenciais, você constrói aplicativos mais resilientes e amigáveis ao usuário.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *