我的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的异常处理程序中编写了相同的代码,但我觉得在这个块中有两次相同的异常处理程序代码是很难的。
答案 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