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