Python:继续迭代for循环异常

Nat*_*han 17 python for-loop exception

for在Python中有一个简单的循环,即使异常块包含一个异常块,也会退出异常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' 
Run Code Online (Sandbox Code Playgroud)

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

Dun*_*can 10

它完全按照预期进行,并继续下一行.如果异常提前终止代码,则它必须不是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
>>> 
Run Code Online (Sandbox Code Playgroud)

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

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