def checkCache(cachedText):
for line in open("cache"):
if cachedText + ":" in line:
print line
open("cache").close()
else:
requestDefinition(cachedText)
此代码搜索文件(缓存)的每一行以查找特定字符串(cachedText +“:”)。
如果找不到特定字符串,则在整个文件中,它将调用另一个函数(requestNewDefinition(cachedText))。
但是我上面的代码为每个不匹配的行执行函数。
如何在文件中搜索字符串(cachedText +“:”),如果在文件中找不到字符串,请执行另一个函数?
示例缓存:
hello:world
foo:bar
答案 0 :(得分:2)
你的for循环被打破了。你实际上正在检查文件的每一行,并为不匹配的每一行执行函数。
另请注意,调用open("cache").close()
将重新打开缓存文件并立即关闭它,而不关闭在for循环开始时打开的句柄。
执行所需操作的一种方法是使else
子句成为for
循环的一部分。 要注意for循环中的其他内容很棘手!。
def checkCache(cachedText):
cache = open( "cache" )
for line in cache:
if cachedText + ":" in line:
break
else:
requestDefinition(cachedText)
cache.close()
只有在循环中没有调用for
时,break
循环的else部分才会在循环结束时执行。
答案 1 :(得分:1)
这样的事情:
def checkCache(cachedText):
for line in open("cache"):
if cachedText + ":" in line:
print line
break
else:
requestDefinition(cachedText)
注意else:
是如何附加到for
的,而不是if
。 else:
仅在for
完成后通过耗尽可迭代而不执行break
来执行,这意味着在文件中的任何位置都找不到cachedText
。有关详细信息,请参阅the Python documentation。
答案 2 :(得分:1)
我的猜测是你想要这样的东西。如果找到该行,则应该“中断”。 “break”将结束for循环。附加到for循环的else语句(与if语句相对)只有在for循环遍历每一行而没有遇到“break”条件时才会执行。完成后仍需要关闭文件。
def checkCache(cachedText):
f = open("cache")
for line in f:
if cachedText + ":" in line:
print line
break
else:
requestDefinition(cachedText)
f.close()