Python try... кроме запятой vs 'as' in except

В чем разница между "," и "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, которые я должен использовать?

Ответ 1

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

Резюме:

  • В Python 3.x требуется использовать as для назначения исключения переменной.
  • В Python 2.6+ используйте синтаксис as, поскольку он гораздо менее двусмыслен и совместим с Python 3.x.
  • В Python 2.5 и более ранних версиях используйте запятую, так как as не поддерживается.

Ответ 2

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

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

>>> 
woo hoo

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

except (exception1, exception2) as e

а не сказать

except (exception1, exception2), e

который будет работать

Ответ 3

синтаксис "как" является предпочтительным, но если ваш код должен работать со старыми версиями Python (2.6 первым поддерживает новый), тогда вам нужно будет использовать синтаксис запятой.

Ответ 4

Если вы хотите поддерживать все версии Python, вы можете использовать функцию sys.exc_info() следующим образом:

try:
    a = 1/'0'
except (ZeroDivisionError, TypeError):
    e = sys.exc_info()[1]
    print(e.args[0])

(источник:http://python3porting.com/noconv.html)

Ответ 5

Начиная с Python 3.7 (не уверен насчет других версий), синтаксис "запятая" больше не поддерживается:

Исходный файл exception_comma.py:

try:
    result = 1/0
except Exception, e:
    print("An error occurred")
    exit(1)

exit(0)
  • $ python --version --> Python 2.7.10
$ python exception_comma.py
An error occurred
  • $ python3 --version --> Python 3.7.2
$ python3 exception_comma.py
  File "exception_comma.py", line 3
    except Exception, e:
                    ^
SyntaxError: invalid syntax