У меня будет следующая структура кода в моем скрипте Python. Но goto является уродливым и не разрешено использовать в Python.Эквивалент GOTO в обработке исключений Python
Может ли кто-нибудь предложить более красивый и более питонический дизайн потока для этого?
PS: Я попытался использовать рекурсивный вызов функции в обработчике исключений, но через некоторое время программа съела много памяти.
try:
# label: log_in
login_to_system()
# label: run
while True:
query()
calculate()
update()
# Network exceptions might occur during login and query/update
# Other exceptions might occur during query/calculate/update but do not need to login again.
except SomeNetworkException:
# Need to log in to system again
go to: label log_in
except OtherExceptions:
go to: label run
Обновлен:
В этом случае обработчик исключений Network является «общим» оба логином и другими функциями.
Ранее я завернул функцию login_to_system() с помощью блока try/except и написал тот же код в обработчике исключений для входа в систему, но я чувствовал себя уродливо иметь тот же код обработчика исключений дважды в этом блоке.
Почему бы не просто поставить код обработки исключений под 'исключением ', вместо того, чтобы прыгать в другое место? –
Перестройте свой код, чтобы он не нуждался в goto; вместо этого используйте правильную петлю и выйдите из цикла, когда это больше не нужно. Переместите обработку исключений ближе к тому, где фактически нужно обработать исключение. –
Я не могу сказать больше, поскольку ваш образец кода является слишком общим для нас, чтобы быть более конкретным здесь. –