遇到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 中阅读有关警告的更多信息。
我无法让以下代码在 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 中阅读有关警告的更多信息。