with语句 - Python 2.5的回溯兼容
我想在一些生产代码中使用Python 2.5的with
语句。这个功能是被移植过来的,我需要担心会出现什么问题吗?比如在其他机器上能不能用,或者兼容性问题等等?
这段代码
from __future__ import with_statement
在Python 2.6中能用吗?
3 个回答
4
在Python 2.6和3.0/1中,你可以放心地调用这个,没什么问题(在这些版本中,它不会做任何事情)。
7
是的,这句话在Python 2.6中是个无操作的指令,所以你可以放心地在你的2.5代码中使用with
这个关键词,而不会影响你在2.6中的代码运行。这实际上就是Python中“从未来导入”的设计初衷!
3
with_statement这个功能没有被回溯到之前的版本,而是在Python 2.5中实现的。添加新的关键词或语法可能会导致现有的应用程序出现问题。Python的处理方式是让用户可以选择提前使用这些新功能,这样你就可以慢慢地把你的代码过渡到新版本上。
来自 http://python.org/doc/2.5.2/ref/future.html
未来语句是一种指令,告诉编译器某个模块应该使用在未来某个版本的Python中可用的语法或语义来编译。这个未来语句的目的是为了帮助用户迁移到未来版本的Python,这些版本可能会对语言做出不兼容的更改。它允许在模块级别上使用新特性,在这些特性成为标准之前。
你实际上可以查看未来语句,以获取关于首次支持的时间、何时不再需要导入等信息。
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import __future__
>>> dir(__future__)
['CO_FUTURE_ABSOLUTE_IMPORT', 'CO_FUTURE_DIVISION', 'CO_FUTURE_WITH_STATEMENT', 'CO_GENERATOR_ALLOWED', 'CO_NESTED', '_Feature', '__all__', '__builtins__',
__doc__', '__file__', '__name__', 'absolute_import', 'all_feature_names', 'division', 'generators', 'nested_scopes', 'with_statement']
>>> __future__.with_statement
_Feature((2, 5, 0, 'alpha', 1), (2, 6, 0, 'alpha', 0), 32768)
>>>
我个人在Python 2.5中已经使用with_statement超过一年了,没遇到什么问题。我也可以在Python 2.6中无缝运行这段代码。语言中有一些奇怪的边缘情况,他们正在努力清理,主要是与正确地压缩嵌套的with语句有关。