【问题标题】:Python Stay on Element In For LoopPython 停留在 For 循环中的元素上
【发布时间】:2021-09-11 17:06:30
【问题描述】:

我想知道如何以某种方式保持在一个元素上,直到 for 循环中的下一个循环循环。这是一个代码示例:

for element in numbers:
    try:
        ...
    except:
        # It should stay on this element for the next time
        pass

例如,我有

numbers = ['apple', 'banana', 'peach']

现在我以元素 Banana 为例,如果出现该错误,它应该只停留在香蕉上,直到下一个周期,所以预期的输出将是:apple,banana (error),banana (now It再试一次),桃子

如果需要,我可以更详细地解释。

【问题讨论】:

  • A for 循环根本不会这样做 - 每次迭代都会从您正在循环的迭代中获取下一个元素。您需要一个重复使用 for 循环值的内部循环(可能是 while 循环),直到您完成它为止。
  • @jasonharper 你能给我一个代码示例来说明我如何做到这一点吗?

标签: python list for-loop try-except


【解决方案1】:

使用 while 循环迭代索引:

i = 0
while i < len(numbers):
    element = numbers[i]
    try:
        ...
        i+=1
    except:
        # It should stay on this element for the next time
        pass

【讨论】:

    【解决方案2】:

    据我所知,使用常规 for 循环是不可能的。您可以通过直接控制迭代变量来获得类似的东西:

    i = 0
    while i < len(numbers):
      try:
        # Do work
        numbers[i] ....
        i += 1
      except:
        # Don't increment i
        pass
    

    请小心,因为如果“香蕉”永远不会成功,您可能会陷入无限循环。

    【讨论】:

    • 有Banan的只是一个例子,我有一个错误会在一段时间后生效,谢谢!
    【解决方案3】:

    你可以在 for 循环中使用一个简单的 while 循环来做到这一点:

    for element in numbers:
        while True:
            try:
                ...
                break  # Success; break out of the while to the next element.
            except:
                # It should stay on this element for the next time
                pass
    

    【讨论】:

      【解决方案4】:

      您可以在for 中放置一个while 以继续处理该元素,直到您满意为止。这可能会导致无限循环,因此请明智地编写代码。

      numbers = ['apple', 'banana', 'peach']
      
      i_hate_bananas = True
      
      for element in numbers:
          while True:
              try:
                  if i_hate_bananas and element == 'banana':
                      raise ValueError(f'{element}, yuck')
                  print("I like", element)
                  break
              except ValueError as e:
                  print(e)
                  i_hate_bananas = False
      print('done')
      

      这可能比仅使用单个 while 并将索引器递增到 numbers 更好,因为它适用于迭代,因此适用于任何可迭代。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-23
        • 1970-01-01
        • 1970-01-01
        • 2019-10-30
        • 2014-05-10
        相关资源
        最近更新 更多