Sobes.tech
Senior

Quais são os propósitos das classes BaseExceptionGroup e ExceptionGroup em Python?

sobes.tech IA

Resposta da IA

BaseExceptionGroup e ExceptionGroup são projetados para agrupar várias exceções e elevá-las como um único objeto.

BaseExceptionGroup:

  • Classe base para todos os grupos de exceções.
  • Abstrata, não é usada diretamente.
  • Contém lógica comum para lidar com grupos de exceções.

ExceptionGroup:

  • Classe concreta para agrupar exceções que são descendentes de Exception.
  • A classe mais utilizada para lidar com múltiplos erros em código assíncrono ou em execução paralela.
  • Permite tratar exceções individuais dentro do grupo usando except*.

Características principais:

  • exceptions: Tupla de exceções no grupo.
  • message: Mensagem que descreve o grupo de exceções.
  • subgroup(filter): Cria um novo grupo de exceções contendo apenas as exceções do grupo original que correspondem ao filtro.
  • split(filter): Divide o grupo em dois: um com exceções que correspondem ao filtro e outro com as restantes. Retorna uma tupla (matching_group, rest_group).

Exemplo de uso com except*:

# Simulação de funções que geram erros
def func1():
    raise ValueError("Erro em func1")

def func2():
    raise TypeError("Erro em func2")

# Agrupamento e tratamento de exceções
try:
    # Simulação de execução de várias tarefas
    errors = []
    try:
        func1()
    except Exception as e:
        errors.append(e)
    try:
        func2()
    except Exception as e:
        errors.append(e)

    if errors:
        raise ExceptionGroup("Vários erros no processo", errors)

except* ValueError as ve:
    # Tratamento apenas de ValueError do grupo
    print(f"Erro ValueError capturado: {ve}")
except* TypeError as te:
    # Tratamento apenas de TypeError do grupo
    print(f"Erro TypeError capturado: {te}")
except ExceptionGroup as eg:
    # Tratamento do restante (ou de todo o grupo, se não houver correspondências)
    print(f"Grupo restante de exceções capturado: {eg}")