Python:继续迭代for循环异常

时间:2011-11-28 08:18:47

标签: python exception for-loop

我在Python中有一个简单的for循环,即使异常块包含continue,也会在异常中退出。当它到达IndexError并退出for循环时,仍有大约10行可供阅读。我在这里缺少什么?

for row in hkx:  ##'hkx' are rows being read in from 'csv.open'
    try:
        print row[2],row[4]
    except IndexError, e:
        print 'Error:',e
        print 'Row Data:',len(row),row
        continue  ## I thought this would just move on to the next row in 'hkx' 

(对不起,这里的Python新手......) 提前谢谢!

1 个答案:

答案 0 :(得分:9)

它完全按照应有的方式完成并继续下一行。如果异常提前终止代码,则它必须不是IndexError,或者必须从try:块之外的某些代码抛出。

>>> hkx = [ range(5), range(4), range(4), range(5) ]
>>> for row in hkx:  ##'hkx' are rows being read in from 'csv.open'
    try:
        print row[2],row[4]
    except IndexError, e:
        print 'Error:',e
        print 'Row Data:',len(row),row
        continue  ## I thought this would just move on to the next row in 'hkx'

2 4
2 Error: list index out of range
Row Data: 4 [0, 1, 2, 3]
2 Error: list index out of range
Row Data: 4 [0, 1, 2, 3]
2 4
>>> 

请注意,如果该行包含至少3个项目,您将获得一半的打印输出,如果您使用格式字符串,则可以避免这种情况。 (例如print "{} {}".format(row[2],row[4])

你还没有说过如何定义hkx,除了它来自csv.open。如果它是一个生成器而不是一个简单的列表,那么它可能只是迭代它抛出IndexError。在这种情况下,您不会捕获,但堆栈转储将显示带有for row in hkx的行。