减少计数值以重复循环循环不起作用。python中的for循环有一个包含continue语句的异常处理程序 范围(0650)内的i的: s=票[i] 尝试: response=resource.get(path='ticket/%s'%s[0])#从RT服务器获取票证数据 除urllib2.URLError外,e:#如果连接失败 resource=RTResource(url、用户、pwd、CookieAuthenticator)#重新连接到RT服务器 计数-=1#计数重新连接尝试次数 如果计数小于0: 打印“票据%s处的连接失败”%s[0] 打印“已从%s中获取%s张票证”%{i+1,len(票证)+1} wb.save(fname) 系统出口(1) 打印“重试…” i-=1 持续 计数=10 …这里有更多代码。。。

减少计数值以重复循环循环不起作用。python中的for循环有一个包含continue语句的异常处理程序 范围(0650)内的i的: s=票[i] 尝试: response=resource.get(path='ticket/%s'%s[0])#从RT服务器获取票证数据 除urllib2.URLError外,e:#如果连接失败 resource=RTResource(url、用户、pwd、CookieAuthenticator)#重新连接到RT服务器 计数-=1#计数重新连接尝试次数 如果计数小于0: 打印“票据%s处的连接失败”%s[0] 打印“已从%s中获取%s张票证”%{i+1,len(票证)+1} wb.save(fname) 系统出口(1) 打印“重试…” i-=1 持续 计数=10 …这里有更多代码。。。,python,exception,continue,Python,Exception,Continue,上面的代码执行得很好,但在抛出异常时将跳过迭代。我试图减少I的值,然后继续循环,这样当抛出异常时,循环将对相同的I值重复。当跳过值i时,我从RT服务器丢失了一张票证。我该如何修复它呢?(除了g.d.d.c.提出的正确观点,即无法按您所采取的特定方式减少循环计数器之外,)这类东西正是我们的动机。您可能应该按如下方式组织代码: 试试-应该运行但可能不运行的部件 除外-仅当出现问题时才执行的部分 else(可选)-仅当没有问题时才执行的部分 最后-在任何情况下都要做的事情 (除了g.d.d.c.提出

上面的代码执行得很好,但在抛出异常时将跳过迭代。我试图减少I的值,然后继续循环,这样当抛出异常时,循环将对相同的I值重复。当跳过值i时,我从RT服务器丢失了一张票证。我该如何修复它呢?

(除了g.d.d.c.提出的正确观点,即无法按您所采取的特定方式减少循环计数器之外,)这类东西正是我们的动机。您可能应该按如下方式组织代码:

  • 试试
    -应该运行但可能不运行的部件

  • 除外
    -仅当出现问题时才执行的部分

  • else
    (可选)-仅当没有问题时才执行的部分

  • 最后
    -在任何情况下都要做的事情

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

  • 试试
    -应该运行但可能不运行的部件

  • 除外
    -仅当出现问题时才执行的部分

  • else
    (可选)-仅当没有问题时才执行的部分

  • 最后
    -在任何情况下都要做的事情


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

      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...
      

      然后将其放入
      for
      循环中。或者更好,提取一个方法来简化可读性,但这是另一篇文章。

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

      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...
      

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

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

      while True:
          # code here
          if success:
              break
      
      i=0
      当我<650时:
      s=票[i]
      尝试:
      response=resource.get(path='ticket/%s'%s[0])#从RT服务器获取票证数据
      除urllib2.URLError外,e:#如果连接失败
      resource=RTResource(url、用户、pwd、CookieAuthenticator)#重新连接到RT服务器
      计数-=1#计数重新连接尝试次数
      如果计数小于0:
      打印“票据%s处的连接失败”%s[0]
      打印“已从%s中获取%s张票证”%{i+1,len(票证)+1}
      wb.save(fname)
      系统出口(1)
      打印“重试…”
      持续
      计数=10
      i+=1
      …这里有更多代码。。。
      
      正如g.d.d.c建议的那样,在for循环中嵌入while循环的另一种方法是简单地使用while循环而不是for循环,如下所示:

      while True:
          # code here
          if success:
              break
      
      i=0
      当我<650时:
      s=票[i]
      尝试:
      response=resource.get(path='ticket/%s'%s[0])#从RT服务器获取票证数据
      除urllib2.URLError外,e:#如果连接失败
      resource=RTResource(url、用户、pwd、CookieAuthenticator)#重新连接到RT服务器
      计数-=1#计数重新连接尝试次数
      如果计数小于0:
      打印“票据%s处的连接失败”%s[0]
      打印“已从%s中获取%s张票证”%{i+1,len(票证)+1}
      wb.save(fname)
      系统出口(1)
      打印“重试…”
      持续
      计数=10
      i+=1
      …这里有更多代码。。。
      
      从for循环更改为while循环。应该有用。但我不能测试它。将等待验证连接错误。已从for循环更改为while循环。应该有用。但我不能测试它。将等待连接错误验证。谢谢这正是我所做的谢谢这正是我所做的