考虑以下事项:

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

文件是否会正确关闭,或者使用return是否会绕过context manager

推荐答案

是的,它的行为就像try块之后的finally块,也就是说,它总是执行(当然,除非python进程以一种不寻常的方式终止).

with语句的规格为PEP-343的示例之一中也提到了这一点:

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).

然而,值得一提的是,如果不将整个with挡路放入try..except挡路中,您就无法轻松捕获由open()调用抛出的异常,这通常不是人们想要的.

Python相关问答推荐

将HLS纳入媒体包

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

即使在可见的情况下也不相互作用

Polars LazyFrame在收集后未返回指定的模式顺序

如何将双框框列中的成对变成两个新列

Pytest两个具有无限循环和await命令的Deliverc函数

如何避免Chained when/then分配中的Mypy不兼容类型警告?

pandas滚动和窗口中有效观察的最大数量

加速Python循环

使用Python从URL下载Excel文件

用砂箱开发Web统计分析

在Python中使用if else或使用regex将二进制数据如111转换为001""

try 检索blob名称列表时出现错误填充错误""

PYTHON、VLC、RTSP.屏幕截图不起作用

pandas fill和bfill基于另一列中的条件

BeautifulSoup:超过24个字符(从a到z)的迭代失败:降低了首次深入了解数据集的复杂性:

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

504未连接IB API TWS错误—即使API连接显示已接受''

PYTHON中的pd.wide_to_long比较慢

Scipy.linprog的可行性有问题吗?(A_ub@x0<;=b_ub).all()为True-但是-linprog(np.zeros_like(X0),A_ub=A_ub,b_ub=b_ub)不可行