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)
>>>
Лично я интенсивно использую with_statement в Python 2.5 уже более года, и у меня не было проблем. Я также прозрачно запускаю этот код с Python 2.6. Есть несколько странных угловых случаев, над которыми они работали при очистке языка, в основном связанных с чистым и корректным сжатием, вложенным в операторы.