在使用contextlib定义用于with
的自定义“open”函数的another answer here中,来自contextlib的contextmanager
用于定义处理数据打开和流的函数,最后关闭了流。
在了解这一点时,我发现还有一个closing
函数似乎工作方式类似,特别关注完成时关闭流。
我理解contextmanager
构造如何工作(必要时明确关闭流),但我想知道它是否不完整 - 为了正确性(并且是Pythonic),应该closing
参与好吧,还是首选?
编辑:我所提到的答案目前调用了fh.close() - 我想知道某种方式closing
是否应该以某种方式介入contextlib
而不是那样。关于function confirmation(){
var confirmVal = window.confirm("Please confirm?");
if( confirmVal == true ){
return true;
}
}
的文档首先没有帮助我解决这个问题,所以这个问题。
答案 0 :(得分:1)
在答案中将contextlib.closing
粘贴在上下文管理器中是完全不合适的,原因有很多:
closing
会尝试关闭错误的对象。如果您始终要关闭文件,则通常既不需要closing
也不需要自定义上下文管理器,因为文件已经是上下文管理器。在with
语句中粘贴文件将在最后关闭它而不需要任何特殊包装。