Catch KeyboardInterrupt to raise KeyboardInterrupt



我有一段代码,看起来像这样:

try:
my_number = calculate_number()
except KeyboardInterrupt:
raise KeyboardInterrupt()
except:
my_number = float('NaN')

我的意图,我试着计算数量,如果由于某种原因不能完成,只是存储NaN价值,除非原因很明显,用户不希望数量计算(如按ctrl+c)。虽然这是我想要的,但我想知道这是否是实现这一点的正确方式,在某些情况下它可能会失败,或者是否有更正确的方法来做到这一点。

不需要显式地处理KeyboardInterrupt。通过捕获Exception,你排除了KeyboardInterrupt和一堆其他"内部"。您可能不想捕获异常,但捕获所有其他运行时错误。

try:
my_number = calculate_number()
except Exception:
my_number = float('NaN')

如果你确实想处理除特定异常外的所有内容,那么我只是使用裸raise重新引发,而不是引发新的KeyboardInterrupt异常。引发一个新的异常会丢失有关异常最初发生在何处的信息。这对KeyboardInterrupt来说可能不是很重要,但对其他异常来说绝对很重要。一个额外的好处是,如果您想要排除多个异常,您可以将它们全部合并到单个except子句中,因为它们的代码都是相同的。

try:
my_number = calculate_number()
except KeyboardInterrupt, ZeroDivisionError:
raise
except:
my_number = float('NaN')

结合这两种方法可以让您不必拼写哪个"系统";不处理的异常,同时指定"运行时";可忽略的异常

try:
my_number = calculate_number()
except ZeroDivisionError, OverflowError:
raise
except Exception:
my_number = float('NaN')

相关内容

  • 没有找到相关文章

最新更新