我刚刚用 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
我将匹配检查放在 with 语句之外,因为我喜欢关闭并完成文件。但是,如果content
永远不会被构建,这将失败。
我的解决方案是在这段代码上方初始化content
为空字符串,但我得到的感觉是我希望函数结束;异常被抛出函数或其他东西。
在这种情况下,我可以将函数的其余部分放入with
块中,但这会扩大打开文件的范围。我可以在块content
之前创建,with
以便它在失败时存在。但是,我很好奇,人们还希望看到哪些其他解决方案(假设这个问题首先有意义)?
我想我会喜欢这样的东西:
with open(filename, 'rt') as f:
content = f.read()
else:
content = ''
matches = re.findall(REGEX, content)
如果这是普遍共识,我将接受我只需要处理它并为函数的其余部分保持打开文件的想法。:)