Питон попробовать...за исключением запятой против 'как' в кроме


в чем разница между ',' и 'as' в операторах except, например:

try:
    pass
except Exception, exception:
    pass

и:

try:
    pass
except Exception as exception:
    pass

является ли второй синтаксис законным в 2.6? Он работает в CPython 2.6 на Windows, но интерпретатор 2.5 в cygwin жалуется, что он недействителен.

если они оба действительны в 2.6, который я должен использовать?

4 212

4 ответа:

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

резюме:

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

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

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

>>> 
woo hoo

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

except (exception1, exception2) as e

а не скажи

except (exception1, exception2), e

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

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

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