Попытка Python … кроме запятой по сравнению с 'как' в кроме

Что является различием между'', и 'как' в кроме операторов, например:

try:
    pass
except Exception, exception:
    pass

и:

try:
    pass
except Exception as exception:
    pass

Действительно ли второй синтаксис законен в 2,6? Это работает в CPython 2.6 над Windows, но 2,5 интерпретатора в cygwin жалуются, что это недопустимо.

Если они оба допустимы в 2,6, который я должен использовать?

240
задан Peter Graham 28 March 2010 в 17:16
поделиться

3 ответа

Окончательный документ - PEP-3110: перехват исключений

Резюме:

  • В Python 3.x, используя как требуется для назначения исключения переменной.
  • В Python 2.6+ используйте синтаксис как , поскольку он гораздо менее неоднозначен и совместим с Python 3.x.
  • В Python 2.5 и ранее используйте версию с запятыми, поскольку как не поддерживается.
278
ответ дан 23 November 2019 в 03:19
поделиться

синтаксис «as» является предпочтительным в будущем, однако, если ваш код должен работать со старыми версиями Python (2.6 - первая версия, поддерживающая новую), вам необходимо использовать синтаксис с запятой.

17
ответ дан 23 November 2019 в 03:19
поделиться

Да, это законно. Я использую Python 2.6

try:
    [] + 3
except Exception as x:
    print "woo hoo"

>>> 
woo hoo

Update: Есть еще одна причина использовать синтаксис as. Использование , делает ситуацию гораздо более неоднозначной, как отмечали другие; и вот в чем разница. Начиная с Python 2.6, существует multicatch, который позволяет ловить несколько исключений в одном except блоке. В такой ситуации выразительнее и питоничнее сказать

except (exception1, exception2) as e

а не сказать

except (exception1, exception2), e

а, что все равно сработает

38
ответ дан 23 November 2019 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: