Em [[Linguagem de programação Python|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`: ```python 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:** ```python 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: ```python 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`:** ```python 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`: ```python 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:** * [Documentação Python sobre exceções e erros](https://docs.python.org/3/tutorial/errors.html) * [PY4E - Python para Todos](https://www.py4e.com/html3/03-conditional)