遇到RunTimeWarning时断点

Breakpoint when encountering RunTimeWarning

我无法让以下代码在 Python 中工作:

for t in range(-5,5):
    try:
        a = np.log(t)
    except RunTimeWarning:
        breakpoint()

我想要的是执行断点语句,当log函数从-5到0求值时。

当使用 np.log(0) 时,numpy 不会抛出异常,而是抛出 警告。这些与异常有很大不同,因为异常将从 运行 停止当前代码,而警告只是通知您但保留代码 运行.

举个例子:

>>> x = np.log(0)

Warning (from warnings module):
  File "<pyshell#1>", line 1
RuntimeWarning: divide by zero encountered in log
>>> x
-inf

如您所见,变量 x 确实得到了一个赋值 -> 警告从未保留 log(...) 来自 运行 和 returning 一个值。

因此,要解决您的问题,您必须在调用 np.log 之前检查传递给代码的值是否为 0。或者,如果您不想让 -inf 成为一个有效的 return 值,但由于某些原因仍然需要调用 np.log,您可以在调用后检查该值是否为 -inf。但是,最好不要编写会导致警告的代码,因此您应该在调用 log 之前检查它是否为 0。

您可以在 python docs 中阅读有关警告的更多信息。