2017-03-04 106 views
0

我想返回KeyError,但它会返回None。我不懂为什么。我想返回KeyError not None

if index == self.length or self.slots[index]==None: 
    raise KeyError 
+2

@AndrewL''()'和消息是可选的,它也是“正确的”来引发异常类* shudder *。 – MSeifert

+1

您是否知道“返回”KeyErrror和“引发”KeyError是非常不同的事情?从你发布的内容来看,我不知道你是否在职,但是如果你不在某个职能上,你不能“返回”某些东西。您可能想要编辑您的问题,以提供更多关于您在此尝试完成的详细信息 –

回答

0

你不提高一个KeyError因为你不进入if分枝。而且您不输入if-分支,因为您的条件都不是true

如果测试用例(你没有显示!)真的应该提高KeyError,你可能需要调整你的条件。

要调试这个问题,你可以插入一些print -statements:

print(index, self.length, index==self.length) 
print(self.slots[index], self.slots[index]==None) 
if index == self.length or self.slots[index]==None: 
    raise KeyError 

或使用您选择的调试器。

但是一些评论:

  • 通常要检查,如果该指数是>=的长度(包括==!)。
  • 您应该使用isNone进行比较。 NoneNotImplemented保证单身。
  • KeyError使用异常消息,例如raise KeyError('index out of bounds or item is None! Try again.')
  • 功能没有打一个明确的return将返回None。这可能就是为什么你的代码返回None