我为python 2.7编写了代码,但服务器有2.5。我如何重写下一个代码,以便它将在python 2.5.2中运行:
gzipHandler = gzip.open(gzipFile)
try:
with open(txtFile, 'w') as out:
for line in gzipHandler:
out.write(line)
except:
pass
现在,当我尝试运行我的脚本时,我收到此错误:
警告:'with'将成为Python 2.6 Traceback中的保留关键字 (最近一次调用最后一次):文件“Main.py”,第7行,in 来自Extractor import Extractor File“/data/client/scripts/Extractor.py”,第29行 打开(self._logFile,'w')为: ^ SyntaxError:语法无效
谢谢, 罗恩。
答案 0 :(得分:19)
在Python 2.5中,您实际上可以使用with
语句 - 只需从__future__
导入它:
from __future__ import with_statement
答案 1 :(得分:3)
如果您不能或不想使用with
,请使用finally
:
gzipHandler = gzip.open(gzipFile)
out = open(txtFile, 'w')
try:
for line in gzipHandler:
out.write(line)
finally:
out.close()
gzipHandler.close()
无论是否引发异常,finally
子句中的清理代码将始终有效。
答案 2 :(得分:-1)
try / except块中的代码的“旧”版本将是:
out = open(txtFile, 'w')
for line in gzipHandler:
out.write(line)
out.close()
with open() ...
context manager实际上与此相同。当对象被垃圾收集时,Python会自动关闭文件(有关详细信息,请参阅question 575278),因此当{1}}函数由于某种原因停止执行时,它将被关闭。此外,操作系统将在Python进程终止时关闭文件,如果在执行out
之前由于某种原因导致灾难性失败。
out.close()
上下文管理器将扩展为大约:
with open()
有关说明,请参阅上面的“上下文管理器”链接。那么它是怎样工作的?它打开文件,执行您的代码块,然后显式关闭文件。我描述的“旧”版本如何工作?它打开文件,执行你的代码块,然后在其范围完成或Python进程终止时隐式关闭文件。
保存但对于“显式”与“隐式”部分,功能相同。