我有一个要遍历的文件列表:
condition = True
list = ['file1', 'file2', 'file3']
for item in list:
if condition == True
union = <insert process>
....a bunch of other stuff.....
让我们说代码在file1和file3上工作正常,但是当到达file2时,将引发IO错误。我想做的是在IOError抛出时绕过file2,返回到列表中的下一项。我想使用try: except
方法来执行此操作,但似乎无法正确执行。注意:我在代码开头有一个整体try-catch
。我不确定是否会干扰仅在代码的特定部分添加第二个代码。
try:
try:
condition = True
list = ['file1', 'file2', 'file3']
for item in list:
if condition == True
union = <insert process>
....a bunch of other stuff.....
except IOError:
continue
.....a bunch more stuff.....
except Exception as e:
logfile.write(e.message)
logfile.close()
exit()
“通过”和“继续”之间有什么区别,为什么上面的代码不起作用?我需要在IOError
部分添加更多具体信息吗?
答案 0 :(得分:1)
pass
和 continue
有什么区别?
pass
是一个空操作,它告诉python不执行任何操作并转到下一条指令。
continue
是一个循环操作,它告诉python忽略在该循环迭代中剩下的任何其他代码,并像进入循环块末尾一样简单地转到下一个迭代。 >
例如:
def foo():
for i in range(10):
if i == 5:
pass
print(i)
def bar():
for i in range(10):
if i == 5:
continue
print(i)
第一个将打印0、1、2、3、4, 5 ,6、7、8、9,但是第二个将打印0、1、2、3, 4,6 ,7、8、9,因为continue
语句将导致python跳回到起始位置,而不继续执行print
指令,而pass
将继续正常执行循环。
为什么上面的代码不起作用?
您的代码存在的问题是try
块位于循环外部,一旦循环内部发生异常,则循环在该点终止并跳至循环外部的except
块。要解决此问题,只需将try
和except
块移至for
循环中即可:
try:
condition = True
list = ['file1', 'file2', 'file3']
for item in list:
try:
# open the file 'item' somewhere here
if condition == True
union = <insert process>
....a bunch of other stuff.....
except IOError:
# this will now jump back to for item in list: and go to the next item
continue
.....a bunch more stuff.....
except Exception as e:
logfile.write(e.message)
logfile.close()
exit()