Sobes.tech
Junior

Que estruturas existem em Python para lidar com exceções?

sobes.tech IA

Resposta da IA

Em Python, utilizam-se as seguintes construções para lidar com exceções:

  • try...except: A base do tratamento de exceções. O bloco try contém o código que pode gerar uma exceção. Se uma exceção ocorrer, o bloco except correspondente é executado.

    # Exemplos de uso de try...except
    try:
        result = 10 / 0  # Tentativa de divisão por zero
    except ZeroDivisionError:
        print("Erro: Divisão por zero!")
    
  • except Exception as e: Captura qualquer exceção e atribui ao objeto e para processamento posterior (por exemplo, registo ou exibição de mensagem).

    # Captura de qualquer exceção
    try:
        value = int("abc")
    except Exception as e:
        print(f"Ocorreu um erro: {e}")
    
  • Múltiplos blocos except: Permitem tratar diferentes tipos de exceções de forma distinta.

    # Tratamento de múltiplos tipos de exceções
    try:
        file = open("non_existent_file.txt", "r")
        content = file.read()
        file.close()
    except FileNotFoundError:
        print("Erro: ficheiro não encontrado!")
    except IOError:
        print("Erro de entrada/saída!")
    
  • except (...): Agrupa vários tipos de exceções num único bloco.

    # Agrupamento de tipos de exceções
    try:
        some_operation()
    except (ValueError, TypeError):
        print("Erro de valor ou de tipo!")
    
  • try...except...else: O bloco else é executado se nenhuma exceção ocorrer no bloco try.

    # Uso de else
    try:
        num1 = 10
        num2 = 2
        result = num1 / num2
    except ZeroDivisionError:
        print("Erro: divisão por zero!")
    else:
        print(f"Resultado da divisão: {result}")
    
  • try...except...finally: O bloco finally é sempre executado, independentemente de ocorrer ou não uma exceção. É usado para liberar recursos (por exemplo, fechar ficheiros).

    # Uso de finally
    file = None
    try:
        file = open("data.txt", "r")
        content = file.read()
    except FileNotFoundError:
        print("Ficheiro não encontrado.")
    finally:
        if file:
            file.close()
            print("Ficheiro fechado.")
    
  • raise: Permite lançar explicitamente uma exceção.

    # Lançamento explícito de exceção
    def validate_age(age):
        if age < 0:
            raise ValueError("A idade não pode ser negativa!")
        return age
    
    try:
        validate_age(-5)
    except ValueError as e:
        print(f"Erro de validação: {e}")