I must use goto in Python. I found entrians goto but my Python implementation (CPython 2.7.1 on Mac) does not have this module, so it doesn’t seem to be portable. It should at least work in all Python implementations which support CPython bytecode (esp. I care about CPython and PyPy). Then there is this related question, and cdjc’s goto. And the ones given by answers below.
I could go and build up the bytecode manually (i.e. write my own Python compiler) because there is such an instruction (JUMP_ABSOLUTE and friends). But I wonder if there is an easier way. Is it possible via inspect or so to call a single bytecode instruction? I also thought about compiling via Python and then automatically patching the generated Python bytecode.
Of course, people will ask why and will not give me any helpful answer if I don’t explain why I really really need this. So in short my use case: I am translating a C AST to Python AST and compiling this. I can map every logical flow (all the loops and other stuff) in some way to equivalent Python code. Everything except goto. Related projects: PyCParser (see interpreter.py), PyCPython, PyLua.
I know what everybody is thinking:
However, there might be some didactic cases where you actually need a
goto.This python recipe provides the
gotocommand as a function decorator.The goto decorator (Python recipe by Carl Cerecke)
Usage
Update
Here’re two additional implementations compatible with Python 3: