对于我的应用程序,我使用python接口来读取微控制器的寄存器。有时,读取失败并导致异常。理想情况下,我想做的是异常,我想回到有异常的同一行并重做它。这意味着,基本上回到读取寄存器失败的语句。我可以单次阅读以下内容:
while ReadSuccess == 0:
try:
readregister();
faultReadSuccess = 1
except (KeyboardInterrupt, SystemExit):
print "Program manually stopped through Ctrl-C"
raise
except:
faultReadSuccess = 0
print "Reading failure"
time.sleep(.5)
这基本上在一次读取时只重复读取直到它通过。但是,我有几个寄存器读取命令分散在我的程序中,这些是流量敏感的读取,我不能只是从代码的开头或一段代码开始,通过while循环读取等等。相反,如果读取失败,我需要直接重做该读取,直到它通过然后继续。
但是,我不知道如何在没有每个人阅读的情况下执行此操作,请执行上述代码。我试着寻找一个“跳转到”/“转到”前一行的等价物,但我找不到任何东西。是否有一些东西可以让我在例外时重复失败的那条线?
答案 0 :(得分:1)
我建议您创建一个新函数来重试read_register(),并传递一个参数来控制您想重试的次数。例如,要定义如下函数:
def read_retry(read_reg, n):
"""
"read_reg" is one of your read_register functions;
"n" is the retry times.
"""
i = 0 # i is the counter
while i < n:
try:
read_reg()
break # if success, then exit the loop
except:
print "Reading failure for {} time(s)".format(i+1)
time.sleep(0.5)
i = i + 1
说,您想重试read_register_1()
3次。只需致电read_retry(read_register_1, 3)
即可。
答案 1 :(得分:0)
所以你必须做这样的事情:
while True:
try:
read_register_1()
except:
time.sleep(0.5)
else:
break
while True:
try:
read_register_2()
except:
time.sleep(0.5)
else:
break