Python 如果发生异常,如何重试嵌套for循环?
当异常发生时,它跳过当前的“y”。我无法阻止这一切Python 如果发生异常,如何重试嵌套for循环?,python,python-requests,Python,Python Requests,当异常发生时,它跳过当前的“y”。我无法阻止这一切 for x in range(1, 100): for y in range(1, 100): try: text = requests.post(url, {"x":a, "y":b}) except: time.sleep(10) 使用while True解决,但现在它
for x in range(1, 100):
for y in range(1, 100):
try:
text = requests.post(url, {"x":a, "y":b})
except:
time.sleep(10)
使用while True解决,但现在它不会中断第一个循环您可以将
try
/块包装在循环中,但
块除外,并在try
块末尾包含break
语句。您的程序将继续尝试发出post请求,直到成功并达到中断
。如果请求.post
遇到异常,程序将跳过中断
并移动到除
块,等待,然后重试
例如:
for x in range(1, 100):
for y in range(1, 100):
while True:
try:
text = requests.post(url, {"x":a, "y":b})
break
except:
time.sleep(10)
编辑
由于您提到对于每个x
,程序应该尝试每个y
,直到找到正确的y
,此时程序应该跳到下一个x
,因此我添加了此更新。为此,如果找到了正确的y
,可以保留一个变量进行跟踪。然后,在尝试每个y
之后,您可以检查此变量的值(found\u correct\u y
),如果它是True
,则在…循环中为y中断,并继续执行x
的下一个值
下面是一个例子:
for x in range(1, 100):
found_correct_y = False
for y in range(1, 100):
while True:
try:
response = requests.post(url, {"x":a, "y":b})
found_correct_y = was_correct_y(response)
break # out of the 'while True' loop
except:
time.sleep(10)
if found_correct_y:
break # out of the 'for y ...' loop, to the next x
def was_correct_y(response):
"""returns a boolean based on some properties of the response"""
pass
您可以将try
/除
之外的块包装在一个循环中,并在try
块的末尾包含一个break
语句。您的程序将继续尝试发出post请求,直到成功并达到中断
。如果请求.post
遇到异常,程序将跳过中断
并移动到除
块,等待,然后重试
例如:
for x in range(1, 100):
for y in range(1, 100):
while True:
try:
text = requests.post(url, {"x":a, "y":b})
break
except:
time.sleep(10)
编辑
由于您提到对于每个x
,程序应该尝试每个y
,直到找到正确的y
,此时程序应该跳到下一个x
,因此我添加了此更新。为此,如果找到了正确的y
,可以保留一个变量进行跟踪。然后,在尝试每个y
之后,您可以检查此变量的值(found\u correct\u y
),如果它是True
,则在…
循环中为y中断,并继续执行x
的下一个值
下面是一个例子:
for x in range(1, 100):
found_correct_y = False
for y in range(1, 100):
while True:
try:
response = requests.post(url, {"x":a, "y":b})
found_correct_y = was_correct_y(response)
break # out of the 'while True' loop
except:
time.sleep(10)
if found_correct_y:
break # out of the 'for y ...' loop, to the next x
def was_correct_y(response):
"""returns a boolean based on some properties of the response"""
pass
我在内部“y”块中引发了一个异常,但仍然成功(即循环回“x”块)
for x in range(1, 10):
for y in range(1, 10):
try:
#text = requests.post(url, {"x":a, "y":b})
print('y',y,'x',x)
if (x==2):
raise
except:
time.sleep(10)
我在内部“y”块中引发了一个异常,但仍然成功(即循环回“x”块)
for x in range(1, 10):
for y in range(1, 10):
try:
#text = requests.post(url, {"x":a, "y":b})
print('y',y,'x',x)
if (x==2):
raise
except:
time.sleep(10)
使其成为函数并让异常再次调用该函数。@tgikal重新启动该进程,但它不是我想要的。tgikal重新启动该进程并让异常再次调用该函数。@tgikal重新启动该进程,但它不是我想要的。tgikal解决了问题,但现在它没有中断第一个循环并继续尝试相同的操作x@kusky 你能再解释一下吗?如果抛出异常,是否希望它使用不同的x重试?对于每个x,它将尝试所有100个y,但如果它找到正确的y,则应转到下一个x@kusky做了一个编辑,如果helpsname“response”没有定义,请告诉我,for循环中有很多代码我都忘了。我接受了答案tho,因为它似乎无法解决问题,但现在它没有打破第一个循环,并继续尝试相同的问题x@kusky你能再解释一下吗?如果抛出异常,是否希望它使用不同的x重试?对于每个x,它将尝试所有100个y,但如果它找到正确的y,则应转到下一个x@kusky做了一个编辑,如果helpsname“response”没有定义,请告诉我,for循环中有很多代码我都忘了。我接受了这个答案,因为它似乎会起作用