Catch KeyError in Python

前端 未结 7 1836
没有蜡笔的小新
没有蜡笔的小新 2021-02-01 14:33

If I run the code:

connection = manager.connect(\"I2Cx\")

The program crashes and reports a KeyError because I2Cx doesn\'t exist (it should be

7条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-02-01 14:48

    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().

提交回复
热议问题