Why is "except:" able to catch this error but not "except Exception, e:"?

Viewed 1689

I have the following file:

from fabric.api import env, execute, run

env.hosts = ['1.2.3.4']

def taskA():
    run('ls')

def main():
  try:
    execute(taskA)
  except:
    print "Exception Caught"

main()

I am able to see "Exception Caught" printed when I run this:

$ python test.py
[1.2.3.4] Executing task 'taskA'
[1.2.3.4] run: ls

Fatal error: Timed out trying to connect to 1.2.3.4 (tried 1 time)

Underlying exception:
    timed out

Aborting.
Exception Caught

However, when I switch it to this:

def main():
  try:
    execute(taskA)
  except Exception, e:
    print "Exception Caught", e

main()

I don't see the exception being caught:

[1.2.3.4] run: ls

Fatal error: Timed out trying to connect to 1.2.3.4 (tried 1 time)

Underlying exception:
    timed out

Aborting.

Is there a reason why I am able to catch the error in the code above and not below?

2 Answers
Related