É possível acessar o objeto de contexto (bloco de código) dentro do método __exit __ () de um gerenciador de contexto?

Gostaria de chamar o objeto de código novamente noSaída() se gerar uma exceção (talvez várias vezes, talvez com atraso). Sei que é muito fácil fazer com um decorador, mas minha motivação é que às vezes quero repetir apenas um fragmento de código que não quero extrair para uma função separada e decorá-lo. Estou procurando algo nesse sentido:

class again(object):
    def __enter__(self):
        pass

    def __exit__(self, exc_type, exc_val, exc_tb):
        if exc_type is not None:
            ????        # Invoke the code object again
            return True # eat exception

Seria usado assim:

x = 0
with again():
    print x
    x += 1
    if x == 1:
         raise Exception('I hate 1')

e o resultado esperado seria:

0
1  

Eu poderia encontrar uma maneira de se apossar do objeto de código. Nenhum dos atributos do gerenciador de contexto parece referenciá-lo (acho que não é realmente necessário, porque seu trabalho é apenas fazer as coisas antes e depois).

É possível fazê-lo?

questionAnswers(1)

yourAnswerToTheQuestion