Se você não vê nada excepcional sobre isso, deve se lembrar de uma coisa: Python não tem nenhum primitivo para capturar um bloco de código, ao contrário, digamos, Ruby.Primeiro, precisamos de um gerente de contexto que capturará falhas:
Não precisamos de um __enter__, mas é obrigatório, por isso fazemos um vazio.Se o sucesso é verdadeiro, significa que um dos gerentes de contexto não pegou uma exceção e chamou de auto.Notify_Success (), então quebramos.Neste ponto, você pode estar se perguntando por que não fornecer uma API como:
Mas isso não pode capturar o ZerodivisonError, ele quebraria a primeira curva.Aqui, algo muito inteligente está acontecendo: Looping em Representante () retorna um iterador e cada elemento que o iterador fornece é um gerente de contexto.
Fonte: https://www.bitecode.dev/p/python-cocktail-mix-a-context-manager