What is the difference between ‘,’ and ‘as’ in except statements, eg:
try: pass except Exception, exception: pass
try: pass except Exception as exception: pass
Is the second syntax legal in 2.6? It works in CPython 2.6 on Windows but the 2.5 interpreter in cygwin complains that it is invalid.
If they are both valid in 2.6 which should I use?
the “as” syntax is the preferred one going forward, however if your code needs to work with older Python versions (2.6 is the first to support the new one) then you’ll need to use the comma syntax.
The definitive document is PEP-3110: Catching Exceptions
asis required to assign an exception to a variable.
assyntax, since it is far less ambiguous and forward compatible with Python 3.x.
Yes it’s legal. I’m running Python 2.6
try:  + 3 except Exception as x: print "woo hoo" >>> woo hoo
Update: There is another reason to use the
as syntax. Using
, makes things a lot more ambiguous, as others have pointed out; and here’s what makes the difference. As of Python 2.6, there is
multicatch which allows you to catch multiple exceptions in one
except block. In such a situation, it’s more expressive and pythonic to say
except (exception1, exception2) as e
rather than to say
except (exception1, exception2), e
which would still work
If you want to support all python versions you can use the
sys.exc_info() function like this:
try: a = 1/'0' except (ZeroDivisionError, TypeError): e = sys.exc_info() print(e.args)
As of Python 3.7 (not sure about other versions) the ‘comma’ syntax is not supported any more:
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