我刚刚用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
永远不会建造,这会失败。
我的解决方案是初始化
内容
对于这段代码上面的空字符串,但是我感觉我希望函数只是结束;一个异常会从函数或其他东西中抛出。
在这种情况下,我可以将函数的其余部分放入
具有
块,但这扩大了打开文件的范围。我可以创造
内容
之前
具有
阻止,使其在故障情况下存在。不过,我很好奇,人们喜欢看到哪些其他解决方案(假设这个问题一开始就有意义)?
我想我应该是这样的:
with open(filename, 'rt') as f:
content = f.read()
else:
content = ''
matches = re.findall(REGEX, content)
我将接受这样一个观点,即我只需要处理它,如果这是普遍的共识,那么就将文件留给函数的其余部分。:)