如果我运行代码:
connection = manager.connect("I2Cx")
程序崩溃并报告KeyError,因为I2Cx不存在(它应该是I2C)。
但如果我这样做:
try:
connection = manager.connect("I2Cx")
except Exception, e:
print e
它不会为e打印任何内容。我希望能够打印抛出的异常。如果我尝试使用除零操作来执行相同操作,则会在两种情况下都正确捕获并报告。我在这里缺少什么?
答案 0 :(得分:53)
如果它在没有消息的情况下引发KeyError,那么它将不会打印任何内容。如果你这样做......
try:
connection = manager.connect("I2Cx")
except Exception as e:
print repr(e)
...你至少会得到异常类名。
更好的选择是使用多个except
块,并且只“捕获”您打算处理的异常......
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)
有正当理由可以捕获所有异常,但如果你这样做,你应该几乎总是重新提升它们。
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
...因为如果用户按下CTRL-C,您可能不想处理KeyboardInterrupt
,如果SystemExit
- 阻止调用try
,则不希望处理sys.exit()
。
答案 1 :(得分:14)
我正在使用Python 3.6,并且在Exception和e之间使用逗号不起作用。我需要使用以下语法(仅对任何想知道的人有用)
try:
connection = manager.connect("I2Cx")
except KeyError as e:
print(e.message)
答案 2 :(得分:5)
您应该查阅抛出异常的任何库的文档,以了解如何从异常中获取错误消息。
或者,调试此类事情的好方法是:
except Exception, e:
print dir(e)
查看e
有哪些属性 - 您可能会发现它具有message
属性或类似属性。
答案 3 :(得分:2)
答案 4 :(得分:0)
我不认为python有一个问题:)
try:
connection = manager.connect("I2Cx")
except Exception, e:
print e
答案 5 :(得分:0)
如果您不想仅仅NoneType
处理错误并使用get()
e.g:
manager.connect.get("")
答案 6 :(得分:0)
尝试打印(e.message)这应该能够打印您的例外。
try:
connection = manager.connect("I2Cx")
except Exception, e:
print(e.message)