2017-03-04 6 views
0
私は KeyErrorを返すようにしたい

を返したくないが、代わりにそれはNoneを返します。私はなぜなのか理解していない。あなたがif -branchを入力していないため私はKeyError例外ではないなし

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

@AndrewLi '()'とメッセージは、それが*例外クラス*の身震いを高めるためにも、「正しい」ですが、オプションです。 – MSeifert

+1

KeyErrrorを「返す」こととKeyErrorを「引き上げる」ことは非常に異なることをご存知ですか?あなたが投稿したものから、あなたが機能しているかどうかはわかりませんが、あなたが機能していなければ、何かを "返す"ことはできません。質問を編集して、ここで達成しようとしていることに関する詳細を提供することができます –

答えて

0

あなたはKeyErrorを上げないありません。あなたの条件がtrueではないため、ifブランチを入力しないでください。

はおそらく、テストケースは(あなたが示されていないこと!)本当に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 

またはお好みのデバッガを使用します。

しかしいくつかのコメント:

  • は、通常は、インデックスが長さに>=(!それは==を含みます)であるかどうかを確認したいです。
  • あなたはisを使用してNoneに比較する必要があります。 NoneNotImplementedは、保証されたシングルトンです。
  • 例えば、明示的なreturnをヒットしていませんraise KeyError('index out of bounds or item is None! Try again.')
  • 機能がNoneを返し、KeyErrorに例外メッセージを使用してください。それでおそらくコードがNoneを返したのでしょうか?
関連する問題