Gestionnaire de contexte qui ne s'exécute pas

En jouant un peu avec les frames, j’arrive à ça : à mon avis c’est pas fail-proof…

import sys
import inspect

class _Stop(Exception):
    pass

class ignore:
    def __enter__(self):
        self._frame = inspect.currentframe().f_back

        def tracer(frame, event, arg):
            if frame is self._frame and event == "opcode":
                raise _Stop

        self._frame.f_trace = tracer
        self._frame.f_trace_opcodes = True
        sys.settrace(tracer)

    def __exit__(self, exc_type, exc, tb):
        return exc_type is _Stop

x = 1
print(f"Before ignore(): {x}")
with ignore():
    x += 1
    print("Error!")
print(f"After ignore(): {x}")

Au début ça marchait pas avec les one-liner with ignore(): print("...") car il attendait un event de type line et il avait un opcode, du coup en ajoutant f_trace_opcodes = True je n’ai que des opcode en event mais je pense pas que ça marche avec tout…