使用如果为False并打印而不停止循环

时间:2016-03-09 15:00:22

标签: python if-statement output

我已经定义了一个“值”,我有一个IF语句,如:

value = any ("1" in valueMaj for valueMaj in list)
if value == False:

我可以这样做,所以我的print语句打印出所有不正确的,而不仅仅是一个。示例:

INPUT

print("FILE NOT MATCH:", file) 

输出

FILE NOT MATCH: filenumber1.txt

但是,我希望打印所有不匹配的东西,而不是停止循环。

2 个答案:

答案 0 :(得分:3)

如果您需要所有不匹配的值,请不要使用any()。使用带有过滤器的列表推导来创建列表:

not_matching = [valueMaj for valueMaj in some_list if '1' not in valueMaj]
if not_matching:
    print('The following files do not match:', ', '.join(not_matching))

或使用循环打印出单个文件。

any()会短路并停止迭代;它仅对有效测试序列的条件有用,而不是用于过滤该序列。

答案 1 :(得分:0)

import shutil
import os
import subprocess
import sys
import glob
import re
import fileinput

root_dir = os.getcwd()
uop_dir = root_dir + "\\UoP"

  # .h files
  print ("Searching for .h files: " + uop_dir)
  for root, subfolders, files in os.walk(uop_dir):
   if root.endswith("WHATEVER YOU WANT HERE"):
   if myfile.endswith(".h"):
      print (root + "/" + myfile)
      for file in myfiles:
      for line in open(file):
         line = line.rstrip()
         if re.search('VERSION\s+("\d+\.\d+")$', line):
            version = re.findall("\d+\.\d+" , line)
            # version.append(file)
            if re.search('VERSION\s+("\d+\.\d+")$', line):

                    valueMaj = re.findall('\d+\.', line)
                    ###print(valueMaj)
                    #FINDS MINOR NUMBER
                    if re.search('VERSION\s+("\d+\.\d+")$', line):
                            valueMin = re.findall('\.\d+' , line)
                         ###print(valueMin)
                            value = [valueMaj for valueMaj in file if ('1.7') not in valueMaj]

                            if value:
                                    ###print("FILE NOT MATCH:", file, "\nROOT: " root, "\nVERSION: ", *version)
                                    print("FILE NOT MATCH:", file , "\nVERSION: ", version, "\nMAJOR_NUMBER:", (valueMaj),
                                           "\nMINOR_NUMBER: ", ''.join(valueMin))