我在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新手......) 提前谢谢!
答案 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
的行。