Я разработал метод, имитирующий оператор goto в Python, который традиционно недоступен в этом языке. В этом подходе используется специальное исключение для имитации перехода между помеченными функциями. Код хорошо работает для простых переходов, и я буду признателен за любые отзывы о потенциальных ошибках или улучшениях.
Вот код Python, реализующий функцию перехода:
class Goto(Exception):
pass
def goto(label, globals_=globals()):
if label in globals_:
func = globals_[label]
func()
else:
raise ValueError("Label %s not defined" % label)
def label(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Goto as jump:
if jump.args[0] == func.__name__:
return wrapper(*args, **kwargs)
else:
raise
return wrapper
@label
def start():
print("This is the start.")
goto("end")
@label
def middle():
print("This is the middle.")
@label
def end():
print("This is the end.")
start()
Что вы должны увидеть на выходе:
This is the start.
This is the end.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -correctly