2017-07-21 106 views
0

我已經構建了一個最大堆,並試圖提取最大隻要有元素。如果沒有我正在返回一個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

它似乎在這裏發佈的代碼是無論是從什麼Ÿ不完整或不同你在跑步。 –

回答

2

你應該引發一個異常,而不是返回它。做raise IndexError

5

由於對方回答說,你應該raisereturnexception代替:

if self.size == 0: 
    raise IndexError 

我只想補充一點,你捕獲所有類型的例外與except,你可能想將其更改爲只能望塵莫及IndexError以防傳染其他異常(例如:KeyboardInterrupt),如下所示:

while True: 
    try: 
     print hp.extract_max() 

    except IndexError: 
     break