ほとんどの場合完全に実行されるコードがありますが、時々、トレースバックでこのエラーが発生します。
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
はfloatの配列でありsm2
、floatスカラーです。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