Gestionnaire de contexte qui ne s'exécute pas

C’est énervant votre truc j’avoue :slight_smile:

Je viens de perdre 1h, je fais une pause…

1 « J'aime »

Je viens de tester ton code de 3.9 a 3.14 ça marche, avec :

def test_stdout(capsys):
    with ignore():
        print("Error!")

    out, err = capsys.readouterr()
    assert not out
    assert not err


def test_small_side_effect():
    x = 1
    with ignore():
        x += 1
    assert x == 1


def test_big_side_effect():
    with ignore():
        os._exit(1)


def test_ellipsis(capsys):
    print(1)
    with ignore():
        ...
    print(2)
    out, err = capsys.readouterr()
    assert out == "1\n2\n"
    assert not err


def test_pass(capsys):
    print(1)
    with ignore():
        pass
    print(2)
    out, err = capsys.readouterr()
    assert out == "1\n2\n"
    assert not err
1 « J'aime »

Plus dur maintenant :

with ignore() as ctx:
    ...
print(ctx)

Ça pique car l’exception est levée avant l’affectation de ctx, donc ce code donne un NameError (ou un UnboundLocalError).

Tu voudrais récupérer quel genre d’information depuis ce context manager ?

stdin et stdout, dans mon implem de Forking quelques messages plus haut.

Très cool, c’est quoi ton use case principal de ce genre de chose ?

Il se peut que je l’utilise pour isoler des tests sur Genepy, un genre de sandbox du pauvre, mais je ne sais pas encore : ça a un impact sur le temps de correction tout ces forks !

J’aurai certainement pu le faire avec le module multiprocessing, ou concurrent.future, mais ça n’aurait pas été aussi compact qu’un simple with je pense.