对 with 语句感到困惑 python

Confusion about with statement python

我有一个关于在 python 中使用 with 语句的问题,如下所示:

with open(fname) as f:
    np.save(f,MyData)      

如果我没记错的话,这会以安全的方式打开文件 fname,这样,如果发生异常,文件就会正确关闭。然后它将 MyData 写入文件。但我要做的只是:

np.save(fname,MyData)

这将导致相同的结果,MyData 被写入 fname。我不确定我是否正确理解为什么前者更好。我不明白这个单行如何在文件有 运行 行后保持文件“打开”。因此,我也看不出这会在我的代码之后崩溃时产生问题。

也许这是一个 stupid/basic 问题,但我一直认为更简洁的代码是更好的代码,所以没有额外的 with 循环对我来说似乎更好。

numpy.save() 处理打开和关闭 in its code,但是如果您提供文件描述符,它将保持打开状态,因为它假定您想要对文件执行其他操作,并且如果它关闭文件它会破坏你的功能。

试试这个:

f = open(<file>)
f.close()
f.read()  # boom

另请参阅 hasattr(file, "write") 描述符 中的“文件”或来自文件、缓冲区或 other IO 的“句柄”)检查,该检查如果它是一个具有 write() 方法的对象并且仅通过 Numpy 判断 假设 是真的。

但是 NumPy 不保证滥用其 API 例如如果您创建一个缓冲区的自定义结构并且 包括 write(), it'll be treated as a path and thus crash in the open() 调用。