我刚刚在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)

由于空字符串的重新分解和检查匹配的成本将可忽略。

但是,只要您不重复使用,就立即关闭文件并不重要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top