Python попробуй ... кроме запятой против "как" в кроме - PullRequest
233 голосов
/ 29 марта 2010

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

Ответы [ 5 ]

271 голосов
/ 29 марта 2010

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

Резюме:

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

Да, это законно. Я использую 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

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

17 голосов
/ 29 марта 2010

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

9 голосов
/ 13 февраля 2016

Если вы хотите поддерживать все версии 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)

0 голосов
/ 01 мая 2019

Начиная с 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
...