【发布时间】:2014-12-12 18:33:02
【问题描述】:
在an answer 到my question 中有一个小错字。根据答案,我需要处理KeyError,所以我尝试了
def GetInputData(inputdict, attributelist):
result = {}
try:
result = {a: inputdict[v] for a in attributelist}
except KeyError as KE:
print "KeyError", KE
decodeok = False
else:
decodeok = True
finally:
return decodeok, result
这可行(在修复第 4 行的错误之后...[v] 应该是[a])。
问题是 try-except-finally 导致未处理的 NameError 被隐藏。 Try 中断了 NameError 异常的 finally 部分,因此 decodeok 没有被初始化。
确实这是由于编码错误,但我认为仍然应该引发未明确处理的异常?这让我头疼不已!我必须一直处理所有可能的异常吗?
【问题讨论】:
-
也许您应该在
try块之前初始化decodeok,就像您对result所做的那样,因为通过您的try块的代码路径不会初始化它...或者你甚至可以在try块中初始化它,紧接在你的result = ...行之前...