Difference between except: and except Exception as e: in Python

Both the following snippets of code do the same thing. They catch every exception and execute the code in the except: block

Snippet 1 -

    try:
        #some code that may throw an exception
    except:
        #exception handling code

Snippet 2 -

    try:
        #some code that may throw an exception
    except Exception as e:
        #exception handling code

What is exactly the difference in both the constructs?

In the second you can access the attributes of the exception object:

    >>> def catch():
    ...     try:
    ...         asd()
    ...     except Exception as e:
    ...         print e.message, e.args
    ... 
    >>> catch()
    global name 'asd' is not defined ("global name 'asd' is not defined",)

But it doesn't catch BaseException or the system-exiting exceptions SystemExit, KeyboardInterrupt and GeneratorExit:

    >>> def catch():
    ...     try:
    ...         raise BaseException()
    ...     except Exception as e:
    ...         print e.message, e.args
    ... 
    >>> catch()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 3, in catch
    BaseException

Which a bare except does:

    >>> def catch():
    ...     try:
    ...         raise BaseException()
    ...     except:
    ...         pass
    ... 
    >>> catch()
    >>>

See the Built-in Exceptions section of the docs and the Errors and Exceptions section of the tutorial for more info.

From: stackoverflow.com/q/18982610