对 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()
调用。
我有一个关于在 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()
调用。