[英]Making Python 2.7 code run with Python 2.6
我有这个简单的python函数,可以提取zip文件(独立于平台)
def unzip(source, target):
with zipfile.ZipFile(source , "r") as z:
z.extractall(target)
print "Extracted : " + source + " to: " + target
这在Python 2.7中运行良好,但在Python 2.6中失败:
AttributeError: ZipFile instance has no attribute '__exit__':
我发现这个建议需要升级2.6 - > 2.7 https://bugs.launchpad.net/horizon/+bug/955994
但是可以将上面的代码移植到Python 2.6并仍然保持跨平台吗?
关于什么:
import contextlib
def unzip(source, target):
with contextlib.closing(zipfile.ZipFile(source , "r")) as z:
z.extractall(target)
print "Extracted : " + source + " to: " + target
contextlib.closing
确实完成了ZipFile
上缺少的__exit__
方法应该做的事情。 即,调用close
方法
zipfile模块在python版本2.7.1中更改:
我没有使用python 2.6的上下文管理器“with”解决了同样的问题
newzip = None
try:
newzip = zipfile.ZipFile(_file + ".zip", "w", zipfile.ZIP_DEFLATED)
newzip.write(_file)
finally:
newzip.close()
with context manager防止资源泄漏,因此在Python 2.6中我至少仍然建议尝试/最终关闭资源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.