Python 捕获异常但打印它们
Python Catching Exception But Printing Them
我建立了一个最大堆,只要有元素就尝试提取最大堆。如果没有,我将返回一个 IndexError。这是我要执行的代码:
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 时并没有中断,而是也打印了它。 while 循环没有中断。
<type 'exceptions.IndexError'>
<type 'exceptions.IndexError'>
....
它不断打印异常,而没有中断循环。
有什么问题?
您应该引发异常,而不是返回异常。做 raise IndexError
.
正如其他答案所述,您应该 raise
exception
而不是 return
所以:
if self.size == 0:
raise IndexError
我只想补充一点,您正在使用 except
捕获所有类型的异常,您可能希望将其更改为捕获 IndexError
以避免捕获其他异常(例如:KeyboardInterrupt
) 如下:
while True:
try:
print hp.extract_max()
except IndexError:
break
我建立了一个最大堆,只要有元素就尝试提取最大堆。如果没有,我将返回一个 IndexError。这是我要执行的代码:
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 时并没有中断,而是也打印了它。 while 循环没有中断。
<type 'exceptions.IndexError'>
<type 'exceptions.IndexError'>
....
它不断打印异常,而没有中断循环。
有什么问题?
您应该引发异常,而不是返回异常。做 raise IndexError
.
正如其他答案所述,您应该 raise
exception
而不是 return
所以:
if self.size == 0:
raise IndexError
我只想补充一点,您正在使用 except
捕获所有类型的异常,您可能希望将其更改为捕获 IndexError
以避免捕获其他异常(例如:KeyboardInterrupt
) 如下:
while True:
try:
print hp.extract_max()
except IndexError:
break