代码之家  ›  专栏  ›  技术社区  ›  dash-tom-bang

尽管“with”块失败,但仍对文件内容进行操作

  •  0
  • dash-tom-bang  · 技术社区  · 15 年前

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

    我将接受这样一个观点,即我只需要处理它,如果这是普遍的共识,那么就将文件留给函数的其余部分。:)

    1 回复  |  直到 15 年前
        1
  •  1
  •   Muhammad Alkarouri    15 年前

    content = ''
    with open(filename, 'rt') as f:
        content = f.read()
    
    matches = re.findall(REGEX, content)
    

    推荐文章