Python 2.5.2-什么代替了“with”?陈述
我为 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 行,位于 从提取器导入提取器文件“/data/client/scripts/Extractor.py”,第 29 行 以 open(self._logFile, 'w') 为例: ^ SyntaxError:语法无效
谢谢, 罗恩.
I wrote my code for python 2.7 but the server has 2.5. How do i rewrite the next code so it will run in python 2.5.2:
gzipHandler = gzip.open(gzipFile)
try:
with open(txtFile, 'w') as out:
for line in gzipHandler:
out.write(line)
except:
pass
Right now, when i try to run my script I get this error:
Warning: 'with' will become a reserved keyword in Python 2.6 Traceback
(most recent call last): File "Main.py", line 7, in
from Extractor import Extractor File "/data/client/scripts/Extractor.py", line 29
with open(self._logFile, 'w') as out:
^ SyntaxError: invalid syntax
Thanks,
Ron.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在Python 2.5中,您实际上可以使用
with
语句——只需从__future__
导入它:In Python 2.5, you actually can use the
with
statement -- just import it from__future__
:如果不能或不想使用
with
,则使用finally
:finally
子句中的清理代码将始终是执行,无论是否引发异常。If you can't, or don't want to use
with
, then usefinally
:The cleanup code in the
finally
clause will always be excecuted, whether an exception is raised, or not.try/ except 块中代码的“旧”版本将是:
with open() ...
上下文管理器在这里实际上是同样的事情。当文件的对象被垃圾收集时,Python 会自动关闭文件(请参阅问题 575278 了解详细信息),因此当out
所在的函数由于某种原因停止执行时,out
将被关闭。此外,如果 Python 进程在执行out.close()
之前由于某种原因发生灾难性失败,操作系统将在 Python 进程终止时关闭该文件。with open()
上下文管理器将扩展为大约:有关说明,请参阅上面的“上下文管理器”链接。那么它是如何运作的呢?它打开文件,执行代码块,然后显式关闭文件。我描述的“旧”版本如何工作?它打开文件,执行代码块,然后在文件作用域结束或 Python 进程终止时隐式关闭文件。
但对于“显式”与“隐式”部分,功能是相同的。
The "old" version of the code inside your try/except block would be:
The
with open() ...
context manager is effectively the same thing here. Python closes files automatically when their objects are garbage collected (see question 575278 for details), soout
will be closed when the function it's in stops executing for some reason. Furthermore, the OS will close the file when the Python process terminates should it fail catastrophically for some reason beforeout.close()
gets executed.The
with open()
context manager will expand to approximately:See the above link to "context manager" for an explanation. So how does it work? It opens the file, executes your block of code, then explicitly closes the file. How does the "old" version I describe work? It opens the file, executes your block of code, then implicitly closes the file when its scope is finished or when the Python process terminates.
Save but for the "explicit" vs "implicit" parts, the functionality is identical.