减少计数值以重复循环循环不起作用。 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语句的主要内容,如果未能解决你的问题,请参考以下文章