发生异常时,它将跳过当前的“ 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)
使用True时解决,但现在它不会中断第一个循环
答案 0 :(得分:1)
您可以将try
/ except
块包装成一个循环,并在break
块的末尾包含一个try
语句。您的程序将继续尝试发出发布请求,直到成功并到达break
。如果requests.post
遇到异常,程序将跳过break
并移至except
块,等待,然后重试。
例如:
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_correct_y
)的值,如果它的值是True
,则跳出for y in ...
循环并继续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
答案 1 :(得分:1)
我在内部的'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)