我在下面有一些代码。我想提供一个else,如果没有找到,但不是每次迭代。目前,其他方法适用,但适用于每行: 没有发现 没有发现 ..etc。
如果在逐行遍历整个文件之后没有找到它们,则应该说什么也没找到...下面的上下文代码。
import argparse
parser = argparse.ArgumentParser(description='XSS Payload Search')
parser.add_argument('-p', action='store')
args = parser.parse_args()
key = args.p
with open("xss.txt") as f:
found = False
for line in f:
if key not in line:
line = line.rstrip()
found = True
if found:
print line
else:
print "Nothing Found!"
答案 0 :(得分:2)
UPD::如果打算打印不包含key
的每一行,并在每一行都可以的情况下打印"Nothing Found!"
,请参阅{{3 }}。我在此描述的修复程序只会打印不包含key
的第一行(如果找到)。
Python中else
循环的for
子句仅在没有被break
打破循环时执行(有关详细信息,请参见mnistic's answer)。因此,编写代码的正确方法是:
import argparse
parser = argparse.ArgumentParser(description='XSS Payload Search')
parser.add_argument('-p', action='store')
args = parser.parse_args()
key = args.p
with open("xss.txt") as f:
for line in f:
if key not in line:
line = line.rstrip()
print line
break
else:
print "Nothing Found!"
此外,如果您观察到"Nothing Found!"
每行都打印,则可能是您的缩进不正确,并且else
子句与循环内的if
对齐。
答案 1 :(得分:1)
只需维护一个布尔变量即可跟踪您是否找到了密钥:
import argparse
parser = argparse.ArgumentParser(description='XSS Payload Search')
parser.add_argument('-p', action='store')
args = parser.parse_args()
key = args.p
with open("xss.txt") as f:
found = False
for line in f:
if key in line:
line = line.rstrip()
print line
found = True
if not found:
print "Nothing Found!"