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.