Python 如果发生异常,如何重试嵌套for循环?

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解决,但现在它

当异常发生时,它跳过当前的“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解决,但现在它不会中断第一个循环

您可以将
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循环中有很多代码我都忘了。我接受了这个答案,因为它似乎会起作用