Python异常处理中GOTO的等价物

时间:2014-12-18 16:36:31

标签: python

我的Python脚本中将包含以下代码结构。但是goto很难看,不允许在Python中使用。

有人可以建议一个更漂亮,更pythonic的流程设计来实现这一目标吗?

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

更新:

在这种情况下,网络异常处理程序由登录和其他功能“共享”。

以前,我使用try / except块包装了login_to_system()函数,并在login的异常处理程序中编写了相同的代码,但我觉得在这个块中有两次相同的异常处理程序代码是很难的。

1 个答案:

答案 0 :(得分:1)

我将通过以下方式重写此逻辑:将异常处理移至循环中,并在每次迭代检查时是否需要登录:

needs_login = True

while True:

    try:

        if needs_login:
            login_to_system()
            needs_login = False

        query()
        calculate()
        update()

    except SomeNetworkException:
        needs_login = True

    except OtherExceptions:
        pass