减少计数值以重复循环循环不起作用。 python中的for循环有一个异常处理程序,它有一个continue语句

Posted

技术标签:

【中文标题】减少计数值以重复循环循环不起作用。 python中的for循环有一个异常处理程序,它有一个continue语句【英文标题】:Reducing count value to repeat a loop cycle is not working. The for loop in python has an exception handler that has a continue statement 【发布时间】:2015-06-05 00:55:04 【问题描述】:
for i in range(0, 650):
    s = ticket[i]
    try:
        response = resource.get(path='ticket/%s' % s[0]) # Get ticket data from RT server
    except urllib2.URLError, e: # If connection fails
        resource = RTResource(url, user, pwd, CookieAuthenticator) # Reconnect to RT server
        count -= 1 # Count re-connection attempts
        if count < 0:
            print "Connection failed at ticket %s" % s[0]
            print "Got %s tickets out of %s" % i + 1, len(ticket) + 1
            wb.save(fname)
            sys.exit(1)
        print 'Trying again...'
        i -= 1
        continue
    count = 10
    ...more code here...

上面的代码执行得很好,但是在抛出异常时会跳过一次迭代。我试图减少 i 的值,然后继续循环,以便在引发异常时,循环将重复 i 的相同值。当 i 的值被跳过时,我会从 RT 服务器丢失一张票。我该如何解决?

【问题讨论】:

【参考方案1】:

你......不能在 python 中做到这一点。你不能影响迭代器的值——它在循环中的每一步都使用它自己的内部值,而不是注意你的覆盖尝试。如果您必须在每次迭代中成功,我会使用这样的方法:

while True:
    # code here
    if success:
        break

并将其放在您的 for 循环中。或者更好的是,提取一种方法来简化可读性,但这是另一篇文章。

【讨论】:

从 for 循环更改为 while 循环。应该管用。虽然无法测试。将等待连接错误进行验证。【参考方案2】:

(除了 g.d.d.c. 提出的关于无法按照您的具体方式减少循环计数器的正确观点之外,)这类东西正是 finally 的动机。您可能应该按如下方式组织您的代码:

try - 应该运行但可能不会运行的部分

except - 只有在出现问题时才要做的部分

else(可选)- 只有在没有问题时才要做的部分

finally - 无论如何都要做的事情

【讨论】:

【参考方案3】:

按照 g.d.d.c 的建议,在 for 循环中嵌入 while 循环的另一种方法是简单地使用 while 循环而不是 for 循环,如下所示:

i = 0
while i < 650:
    s = ticket[i]
    try:
        response = resource.get(path='ticket/%s' % s[0]) # Get ticket data from RT server
    except urllib2.URLError, e: # If connection fails
        resource = RTResource(url, user, pwd, CookieAuthenticator) # Reconnect to RT server
        count -= 1 # Count re-connection attempts
        if count < 0:
            print "Connection failed at ticket %s" % s[0]
            print "Got %s tickets out of %s" % i + 1, len(ticket) + 1
            wb.save(fname)
            sys.exit(1)
        print 'Trying again...'
        continue
    count = 10
    i += 1
    ...more code here...

【讨论】:

谢谢 这正是我所做的

以上是关于减少计数值以重复循环循环不起作用。 python中的for循环有一个异常处理程序,它有一个continue语句的主要内容,如果未能解决你的问题,请参考以下文章

for循环中的Python项目计数[重复]

在 Python 中减少 for 循环是不可能的?

实时matplotlib图在循环中不起作用[重复]

如果循环中的语句不起作用[重复]

在 for 循环中创建的线程不起作用 [重复]

循环向量不起作用::向量下标超出范围[重复]