当前位置: 首页 > 面试题库 >

在Python中,如果我在“ with”块内返回文件,该文件是否还会关闭?

鲜于海
2023-03-14
问题内容

考虑以下:

with open(path, mode) as f:
    return [line for line in f if condition]

文件将被正确关闭,还是使用return某种方式绕过上下文管理器?


问题答案:

是的,它的作用就像一个finally块接一个try块,也就是说,它总是执行(除非python进程以异常的方式终止)。

PEP-343的一个示例中也提到了该with语句,它是该语句的规范:

with locked(myLock):
    # Code here executes with myLock held.  The lock is
    # guaranteed to be released when the block is left (even
    # if via return or by an uncaught exception).

但是,值得一提的是,如果open()不将整个with块放入try..except通常不是您想要的块中,就无法轻松捕获调用引发的异常。



 类似资料:
  • 我有一本书。conf文件,我想找到一个以字符串开头的文本块,该字符串是动态的,因为它是从另一个文件加载的。块的结尾将基于一个始终以字符串“endblock”开头的字符串。街上的街区。conf文件如下所示,最后有一个示例需要澄清。 我可以用以下代码加载文本: 例如: 我想知道下面的文本块是否存在于名为example.conf的文件中,如果条件是True,我不想把它写在文件中。否则,我想添加文本块。如

  • 关于tsconfig.json的官方手册说: 如果tsconfig.json中没有“files”属性,则编译器默认将所有TypeScript(*.ts或*.tsx)文件包含在包含目录和子目录中。当存在“files”属性时,只包含指定的文件。 如果指定了“exclude”属性,则编译器将包括包含目录和子目录中的所有TypeScript(*.ts或*.tsx)文件,但排除的文件或文件夹除外。 “Fil

  • 问题内容: 我有一个档案 用户来 我希望用户的浏览器开始下载文件。我怎么做?readfile是否在服务器上打开文件,这似乎是不必要的事情。有没有一种方法可以在不打开服务器的情况下返回文件? 问题答案: 我想你想要这个:

  • 问题内容: 我发现自己同意返回接口而不是具体的类。 原因很简单,我要松散耦合。 但是还会有其他影响或权衡吗? 问题答案: 对于List或ArrayList之类的类型,不应进行任何编译,并且应将List提升Code返回到接口。 如果这是通过诸如CopyOnWriteArrayList之类的并发包进行的,并且您使用的是addIfAbsent之类的方法(未在List接口中定义),您将发现自己受到限制。

  • 我发现自己同意返回一个接口,而不是一个具体的类。

  • 在PHP中,我使用flock创建了一个建议锁,如下所示: 在另一个进程中运行相同的代码将随后失败,因为锁是独占的。但是第二个进程能够运行: 但该文件仍被锁定,这已通过运行第三个进程确认。那么为什么解锁请求返回true呢?