В чем разница между ',' и 'as', за исключением утверждений, например:
try:
pass
except Exception, exception:
pass
и:
try:
pass
except Exception as exception:
pass
Законен ли второй синтаксис в 2.6? Он работает в CPython 2.6 в Windows, но интерпретатор 2.5 в cygwin жалуется, что он недействителен.
Если они оба действительны в 2.6, что я должен использовать?
python
python-2.6
Питер Грэм
источник
источник
as
- единственный способ присвоить исключение локальному в Python 3.x. Ноas
это не обязательно , так как вам не нужно указывать это, если вам это вообще не нужно.Да, это законно. Я использую Python 2.6
Обновление : есть еще одна причина использовать
as
синтаксис. Использование,
делает вещи намного более двусмысленными, как указывали другие; и вот что имеет значение. Начиная с Python 2.6 существуетmulticatch
возможность, позволяющая перехватывать несколько исключений в одномexcept
блоке . В такой ситуации более выразительно и питонно говоритьвместо того чтобы сказать
который бы все еще работал
источник
except NameError, ValueError:
потом задавались вопросом, почемуValueError
исключение так и не было поймано. Или использовалиexcept (NameError, e):
и были оставленыNameError
для'e'
!Синтаксис «as» предпочтителен в дальнейшем, однако, если ваш код должен работать со старыми версиями Python (2.6 первым поддерживает новую), вам нужно будет использовать синтаксис запятых.
источник
Если вы хотите поддерживать все версии Python, вы можете использовать такую
sys.exc_info()
функцию:(источник: http://python3porting.com/noconv.html )
источник
as
цель (вместе с остальной информацией об исключении) неявно редактируется,del
как только вы выходите изexcept
блока (это предотвращает задержку освобождения памяти некоторыми циклическими ссылками, включенными в хранимую трассировку, до тех пор, пока циклический GC не приступит к работе ). Таким образом, этот эквивалентный код немного менее эквивалентен, если только вы не используетеtry/finally
внутриexcept
блока, чтобы убедиться,del e
что выполняется перед выходом изexcept
блока.Начиная с Python 3.7 (не уверен насчет других версий), синтаксис «запятая» больше не поддерживается:
Исходный файл
exception_comma.py
:$ python --version --> Python 2.7.10
$ python3 --version --> Python 3.7.2
источник