2017-07-21 7 views
0

私は最大のヒープを構築し、要素がある限りmaxを抽出しようとしています。もし私がIndexErrorを返すのでなければ。これは私が実行しようとしているコード:Pythonが例外をキャッチしてもそれらを印刷する

while True: 
    try: 
     print hp.extract_max() 
    except: 
     break 

とextract_max()メソッドで:

def extract_max(self): 
    if self.size == 0: 
     return IndexError 
    item = self.items[0] 
    self.items[0] = self.items[self.size - 1] 
    self.heapify_down() 
    del self.items[len(self.items) - 1] 
    return item 

しかし、コードがあまりにもそれを印刷むしろ、はIndexErrorに遭遇すると破壊されていません。 ループが壊れていない。

<type 'exceptions.IndexError'> 
<type 'exceptions.IndexError'> 
.... 

ループを壊すことなく、例外を印刷し続けます。

問題が何ですか?

+0

ここに掲載のコードがどのようなyから不完全または異なるのいずれかであると思われます実行中です。 –

答えて

2

例外が発生した場合は、返さないでください。 raise IndexErrorを実行します。

5

他の答えが述べたように、あなたはとてもexceptionの代わりreturnraise必要があります。

if self.size == 0: 
    raise IndexError 

を私はちょうどあなたがexceptと例外のすべての種類をキャッチしている、あなたはそれを変更する可能性があることを追加したいです次のように:他の唯一の例外(KeyboardInterrupt EXを):キャッチを避けるためにIndexErrorをキャッチ

while True: 
    try: 
     print hp.extract_max() 

    except IndexError: 
     break 
関連する問題