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}")