Форум сайта python.su
-2
Можно сделать поэлегантнее, чем это? Flat is better, than nested.
with obj1 as o1: with obj2 as o3: with obj3 as o3: код
Офлайн
52
Можно.
with open('in', 'r') as fin, open('out', 'w') as fout: ...
Отредактировано fata1ex (Май 18, 2012 17:52:10)
Офлайн
-2
Changed in version 2.7: Support for multiple context expressions.Я же помнил, что что-то не так.
Офлайн
52
Нет, так считать нельзя. Лучше использовать contextlib.nested.
Офлайн
-2
http://docs.python.org/library/contextlib.html
That means, for example, that using nested() to open two files is a programming error as the first file will not be closed promptly if an exception is thrown when opening the second file.
Офлайн
52
Ну а что поделать :) Всегда приходится делать выбор между свежими версиями ПО, которое установлено не на всех системах, и устаревающими, которые сверкают ликами. Можно при большом желании реализовать свой nested, немного переписав исходный под себя.
Офлайн
14
Убедительно прошу: не используйте contextlib.nested — ибо глюкав в некоторых местах. Правильный способ — contextlib2.ExitStack из http://contextlib2.readthedocs.org/en/latest/
Офлайн
-2
Это дополнительный модуль ради одной строчки тянуть? Тогда уж действительно лучше вложенные with плодить.
А в чем глюки?
Офлайн
14
http://code.activestate.com/lists/python-ideas/14609/ — Nick в очередной раз разъясняет проблему.
Офлайн