我有一段代码在大多数情况下都能完美运行,但每隔一段时间我就会在回溯中得到这个错误:
File "/path/to/somefile.py", line 272, in somefile
sm = -0.5 * (wv[0]**2. / sm2 + numpy.log(2. * numpy.pi * sm2))
TypeError: issubclass() arg 2 must be a class or tuple of classes
我知道是什么issubclass()
并且理解错误,但我从未调用它;代码中的那一行是纯算术,所以我不知道为什么TypeError
首先会提出这个问题。我唯一的理论是 Numpy 在幕后调用它,但是回溯应该在 Numpy 源代码中显示有问题的行,对吗?这是怎么回事?
更新:
wv
是一个浮点数组并且sm2
是一个浮点标量。该错误实际上是由 引发的numpy.log
,即(新)行
tmp = numpy.log(2. * numpy.pi * sm2)
但是,错误消息中没有提供更多信息。
更多更新:
我当前版本的 Numpy(来自 Python 提示符):
>>> import numpy
>>> numpy.__version__
'1.6.2'
我将问题行更改为
try:
tmp = numpy.log(2. * numpy.pi * sm2)
except TypeError:
print type(sm2), 2. * numpy.pi * sm2
并得到了输出
<type 'numpy.float64'> 0.0
所以会有某种错误是有道理的,但是如果我这样做(在 Python 提示符下)
>>> import numpy
>>> numpy.log(0.)
我得到了我期望的错误(并且已经通过warning
模块在有问题的代码中处理):
__main__:1: RuntimeWarning: divide by zero encountered in log
-inf