Catch KeyError in Python
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()
.
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.