Reputation: 1147
If I run the code:
connection = manager.connect("I2Cx")
The program crashes and reports a KeyError because I2Cx doesn't exist (it should be I2C).
But if I do:
try:
connection = manager.connect("I2Cx")
except Exception, e:
print e
It doesn't print anything for e. I would like to be able to print the exception that was thrown. If I try the same thing with a divide by zero operation it is caught and reported properly in both cases. What am I missing here?
Upvotes: 61
Views: 211091
Reputation: 41950
If it's raising a KeyError with no message, then it won't print anything. If you do...
try:
connection = manager.connect("I2Cx")
except Exception as e:
print repr(e)
...you'll at least get the exception class name.
A better alternative is to use multiple except
blocks, and only 'catch' the exceptions you intend to handle...
try:
connection = manager.connect("I2Cx")
except KeyError as e:
print 'I got a KeyError - reason "%s"' % str(e)
except IndexError as e:
print 'I got an IndexError - reason "%s"' % str(e)
There are valid reasons to catch all exceptions, but you should almost always re-raise them if you do...
try:
connection = manager.connect("I2Cx")
except KeyError as e:
print 'I got a KeyError - reason "%s"' % str(e)
except:
print 'I got another exception, but I should re-raise'
raise
...because you probably don't want to handle KeyboardInterrupt
if the user presses CTRL-C, nor SystemExit
if the try
-block calls sys.exit()
.
Upvotes: 98
Reputation: 347
I am using Python 3.6 and using a comma between Exception and e does not work. I need to use the following syntax (just for anyone wondering)
try:
connection = manager.connect("I2Cx")
except KeyError as e:
print(e.message)
Upvotes: 20
Reputation: 345
Try print(e.message) this should be able to print your exception.
try:
connection = manager.connect("I2Cx")
except Exception, e:
print(e.message)
Upvotes: -2
Reputation: 11
If you don't want to handle error just NoneType
and use get()
e.g.:
manager.connect.get("")
Upvotes: 1
Reputation: 166379
You can also try to use get()
, for example:
connection = manager.connect.get("I2Cx")
which won't raise a KeyError
in case the key doesn't exist.
You may also use second argument to specify the default value, if the key is not present.
Upvotes: 2
Reputation: 281445
You should consult the documentation of whatever library is throwing the exception, to see how to get an error message out of its exceptions.
Alternatively, a good way to debug this kind of thing is to say:
except Exception, e:
print dir(e)
to see what properties e
has - you'll probably find it has a message
property or similar.
Upvotes: 6
Reputation: 113948
I dont think python has a catch :)
try:
connection = manager.connect("I2Cx")
except Exception, e:
print e
Upvotes: 0