python - 否则一无所获,但不是逐行迭代
问题描述
我在下面有一些代码。如果没有找到但不是每次迭代,我想提供 else 。目前,其他方法有效,但对于每一行来说:NOTHING FOUND NOTHING FOUND ..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!"
解决方案
UPD:如果打算打印不包含的每一行,key
并在每一行都很好时打印"Nothing Found!"
,那么请参考mnistic 的答案。我在这里描述的修复只会打印第一行(如果找到)不包含key
.
Python 中的循环else
子句for
仅在循环未被 by 中断时才会执行break
(有关详细信息,请参阅Python 文档)。因此,编写代码的正确方法是:
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
循环内部对齐。
推荐阅读
- zsh - 在 zsh shell 中,为什么我不能将多个参数传递给位置参数?
- c# - UWP 应用服务未与完全信任进程重新连接
- flutter - 带有 SingleChildScrollView 的 showModalBottomSheet。如何识别何时到达 Flutter 中的滚动结束?
- excel - 如何将链接粘贴到工作表?
- .htaccess - htaccess 不允许重定向特定的子域
- r - 尝试在 IF 语句中使用 Lag 函数来添加前面的行相同的值并且代码不起作用
- python - 命令引发异常:AttributeError: 'str' object has no attribute 'custom_emoji'
- c# - 如何从 Xamarin Forms 中的不同 ContentPage 访问/继承私有字段属性?
- java - 将两个集合添加在一起,如果存在则合并,如果不存在则添加
- android - 从 Firebase ValueEventListener 返回值