尽管“ with”块失败,但在文件的内容上操作
-
03-10-2019 - |
题
我刚刚在Python上写了一个实用程序来做我需要的事情(无关紧要,但这是为内部DSL生成ctags兼容的标签文件)。
无论如何 - 我正在打开并阅读文件 with
陈述,我很好奇,人们如何倾向于在该过程中处理失败?
我的解决方案是
with open(filename, 'rt') as f:
content = f.read()
matches = re.findall(REGEX, content)
if len(matches) > 0:
# do more stuff...
pass
我将匹配项放在带有语句的外面,因为我喜欢关闭文件并完成文件。但是,如果 content
永远不会建造,这将失败。
我的解决方案是初始化 content
在这一点代码上方的空字符串上,但是我得到的是,我希望该功能才能结束。一个例外被抛弃了该功能或其他东西。
在这种情况下,我可以将其余的功能放入 with
阻止,但这扩大了打开文件的范围。我可以创建 content
之前 with
阻止它,因此鉴于失败。但是,我很好奇,人们还喜欢看到哪些其他解决方案(首先,假设这个问题有意义)?
我想我会像这样的东西:
with open(filename, 'rt') as f:
content = f.read()
else:
content = ''
matches = re.findall(REGEX, content)
我将接受这样的想法:如果这是一般共识,我只需要处理它并将文件打开。 :)
解决方案
我要做的就是您所说:
content = ''
with open(filename, 'rt') as f:
content = f.read()
matches = re.findall(REGEX, content)
由于空字符串的重新分解和检查匹配的成本将可忽略。
但是,只要您不重复使用,就立即关闭文件并不重要。
不隶属于 StackOverflow