尝试添加+1秒睡眠以重试时出错

  • 本文关键字:重试 出错 添加 python
  • 更新时间 :
  • 英文 :


在本例中,我尝试再次激活main(),以防one():中出现错误

from random import randrange
import sys
import time
def one():
number = randrange(2)
1/number
def main():
try:
one()
except:
sleep_time = 0
while True:
print('Error')
sleep_time += 1
print('Next attempt in: '+ str(sleep_time) + ' second(s)')
time.sleep(sleep_time)
main()
sys.exit(1)
print('Continue')
main()

当连续出现两个错误时,它会持续暂停1秒:

Error
Next attempt in: 1 second(s)
Error
Next attempt in: 1 second(s)
Continue

我真正想要的是这样一个答案:

Error
Next attempt in: 1 second(s)
Error
Next attempt in: 2 second(s)
Continue

我应该如何继续?

每次对main的递归调用都会将sleep_time覆盖回零。将其指定为函数的参数

def main(sleep_time=0):
try:
one()
except:
while True:
print('Error')
sleep_time += 1
print('Next attempt in: '+ str(sleep_time) + ' second(s)')
time.sleep(sleep_time)
main(sleep_time=sleep_time)
sys.exit(1)
print('Continue')

Error
Next attempt in: 1 second(s)
Error
Next attempt in: 2 second(s)
Error
Next attempt in: 3 second(s)

在其他答案中也发现了问题。一种替代的解决方案;美丽的";Frederick的方法是将变量sleep_time作为输入传递给主函数:

from random import randrange
import sys
import time
def one():
number = randrange(2)
1/number
def main(sleep_time):
try:
one()
except:

while True:
print('Error')
sleep_time += 1
print('Next attempt in: '+ str(sleep_time) + ' second(s)')
time.sleep(sleep_time)
main(sleep_time)
sys.exit(1)
print('Continue')
main(0)

问题是,您总是再次调用主函数,然后sleep_time重置为0,然后再次重置add 1。无需再次调用即可工作:

from random import randrange
import sys
import time
def one():
number = randrange(2)
1/number
def main():
try:
one()
except:
sleep_time = 0
while True:
print('Error')
sleep_time += 1
print('Next attempt in: '+ str(sleep_time) + ' second(s)')
time.sleep(sleep_time)
print('Continue')
main()

while中使用try将使代码更易于阅读,并可能消除反复调用main()的需要:

import sys
import time

def one():
raise ValueError("Error!")

def main():
sleep_time = 0
while 1:
try:
one()
except:
sleep_time += 1
print(f'Next attempt in: {sleep_time} second(s)')
time.sleep(sleep_time)
else:
print("Ok. Exit here")
sys.exit(0)
main()

输出:

Next attempt in: 1 second(s)
Next attempt in: 2 second(s)
Next attempt in: 3 second(s)
...

相关内容

最新更新