Python捕获异常但打印它们

Has*_*bal 0 python heap loops exception index-error

我已经建立了一个最大堆,并尝试提取max,只要有元素.如果没有我正在返回IndexError.这是我正在尝试执行的代码:

while True:
    try:
        print hp.extract_max()
    except:
        break
Run Code Online (Sandbox Code Playgroud)

并在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
Run Code Online (Sandbox Code Playgroud)

但是,代码在遇到IndexError时没有破坏,而是打印它.在同时循环不打破.

<type 'exceptions.IndexError'>
<type 'exceptions.IndexError'>
....
Run Code Online (Sandbox Code Playgroud)

它不断打印异常,而不会打破循环.

有什么问题?

Moh*_*ohd 5

由于对方回答说,你应该raiseexception,而不是return这样:

if self.size == 0:
    raise IndexError
Run Code Online (Sandbox Code Playgroud)

我只想补充一点,你正在捕获所有类型的异常except,你可能想要将其更改为IndexError仅捕获以避免捕获其他异常(例如:)KeyboardInterrupt,如下所示:

while True:
    try:
        print hp.extract_max()

    except IndexError:
        break
Run Code Online (Sandbox Code Playgroud)