在Python异常中,如何重做导致异常的行
问题描述:
对于我的应用程序,我使用python接口来读取微控制器的寄存器。有时,读取失败并导致异常。理想情况下,我想要做的是出现异常,我想回到有异常并重做它的同一行。这意味着,基本上回到阅读注册表失败的陈述。我可以为一个单一的读取做以下几点:在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循环或某物读取一段代码。相反,如果读取失败,我需要直接重做读取直到它通过,然后继续。
但是,我不知道如何做到这一点,没有为每个人阅读,做上面提到的代码。我试图寻找一个“跳转到”/“去”相当于上一行,但我找不到任何东西。有没有什么能让我在例外情况下重复失败的路线?
答
我建议你创建一个新的功能重试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)
。
+0
感谢@Quinn的快速响应。它是一个很好的解决方案,并节省了大量额外的代码编写。真的很感激它 –
答
所以你必须做这样的事情:
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
编写一个函数来执行读取循环,并调用函数。 – user2357112