我想知道如何在for循环中以某种方式停留在一个元素上,直到下一个循环循环。下面是一个代码示例:
for element in numbers:
try:
...
except:
# It should stay on this element for the next time
pass
例如,我有
numbers = ['apple', 'banana', 'peach']
现在我以元素Banana为例,如果出现错误,它应该只停留在Banana上直到下一个循环,所以预期的输出将是:apple, Banana(错误),Banana(现在它再次尝试),peach。
使用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
据我所知,这对于常规的for循环是不可能的。您可以通过直接控制迭代变量获得类似的结果:
i = 0
while i < len(numbers):
try:
# Do work
numbers[i] ....
i += 1
except:
# Don't increment i
pass
要小心,因为使用if "banana"可能会陷入无限循环。永远不会成功。
您可以在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
您可以将while
放入for
中以继续处理该元素,直到您满意为止。这可能会导致无限循环,所以要明智地编写代码。
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
更好,因为它与迭代一起工作,因此与任何可迭代对象一起工作。