for循环列表中断并继续

时间:2015-05-03 18:49:17

标签: python loops for-loop break

正确指出问题:我为混乱道歉 怀疑从循环早期打破。 我有文件夹 - 1995,1996到2014。每个文件夹都有xml文件。在某些xml文件中,条目 - MaxAmdLetterDate为None。 我想继续处理文件夹中的下一个文件,而不是现在使用break,程序执行转到下一个文件夹并在遇到休息时跳过该文件夹中的所有文件 这是代码

import xml.etree.ElementTree as ET
import os
for yrcnt in range(1995,2015):
    old= old="./old/"+ str(yrcnt)
    for dirpath, subdirs, files in os.walk(old): #folder name in which subfolder>files are present
        print files
        for filename in files:
            if filename.endswith(".xml") == True:
                fl=filename
                print fl
                print "-----Reading current file -------"  + str(fl)
                flnm=str(dirpath)+"/"+str(filename)
                tree1 = ET.parse(flnm)                        #db on system
                root1 = tree1.getroot()
                for ch1 in root1.findall('Award'):
                    aid1 = ch1.find('AwardID').text
                    maxdate1=ch1.find('MaxAmdLetterDate').text
                    print "Max amd date : "+str(maxdate1)
            if maxdate1==None:
                break

非常感谢帮助。

原始邮寄: 我的for循环在遇到休息时提前退出。任何补救措施?

files=[1,2,3,4,5]
for filename in files:
  print filename
  if filename==3:
     break

O / P:

  1
  2
  3

预期的O / p

  1
  2
  4
  5

谢谢!

编辑:有一些评论,比如这是预期的休息功能。让我解释一下:我希望函数类似于范围(0,5),Iam使用它作为嵌套循环的一部分,我希望循环继续,而不是由于一个文件退出。

2 个答案:

答案 0 :(得分:4)

这是break的工作方式。如果您想迭代整个列表,只需删除break(或者如果您想对该值执行某些操作,请使用pass作为占位符。)

values = [1, 2, 3, 4, 5]
for value in values:
    if value == 3:
        pass
    print(value)

输出:

1
2
3
4
5  

如果您只想跳过某个值,请使用continue关键字。

values = [1, 2, 3, 4, 5]
for value in values:
    if value == 3:
        continue
    print(value)

输出:

1
2
4
5 

答案 1 :(得分:1)

Break会自动退出循环。如果您不希望在3时打印文件名,请使用if语句,如下所示:

files=[1,2,3,4,5]
for filename in files:
  if filename!=3:
     print filename

结果如下:

1
2
4
5