天天看点

python跳过出错下一个循环_for循环中的tryexcept块跳过下一个迭代?

Python(和大多数语言)很可能会混淆,如果您在对列表使用迭代器的同时修改列表。在

这段代码就是这个问题的牺牲品,因为你修改的是你正在迭代的同一个列表。更常见的是构造一个新的列表作为输出。下面是一个例子:def yield_only_floats(l):

for s in l:

try:

float(s)

yield s

except ValueError:

pass

x = list(yield_only_floats(["1.115","","","4.3"]))

print x

得到['1.115','4.3']

如果要修改原始列表,仍可以执行以下操作:

^{pr2}$

但是,如果你真的想在迭代的同时修改你正在迭代的同一个列表,最好的方法是反向迭代:def leave_only_floats(l):

for i in xrange(len(l) - 1, -1, -1):

try:

float(l[i])

except ValueError:

del l[i]

x = ["1.115","","","4.3"]

leave_only_floats(x)

请注意,我还使用了位置删除,而不是值删除,这使得删除速度更快(不必再次搜索列表)

顺便说一句,你也可以考虑使用列表理解:def is_float(s):

try:

float(s)

return True

except ValueError:

return False

x = ["1.115","","","4.3"]

y = [s for s in x if is_float(s)]

就我个人而言,我认为对于这类问题,列表理解法是最具可读性的。在