当从未调用 issubclass() 时,Python 在 issubclass() 上抛出 TypeError

标签 python numpy python-2.7

我有一段代码在大部分时间都运行得很好,但每隔一段时间我就会在回溯中遇到这个错误:

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 是一个浮点标量。该错误实际上是由 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

最佳答案

毕竟这是我的代码中的一个错误...正如@seberg 指出的那样,这段代码可以正常工作:

>>> import numpy
>>> import warnings
>>> numpy.log(0.)
__main__:1: RuntimeWarning: divide by zero encountered in log
-inf
>>> warnings.simplefilter("error", RuntimeWarning)    # not "RuntimeWarning"
>>> try:
...     numpy.log(0.)
... except RuntimeWarning:
...     print "caught"
...
caught

numpy.seterr不过,提供了一种以这种方式处理 RuntimeWarning 的替代方法:

>>> import numpy
>>> numpy.seterr(all='raise')
{'over': 'warn', 'divide': 'warn', 'invalid': 'warn', 'under': 'ignore'}
>>> try:
...     numpy.log(0.)
... except FloatingPointError:
...     print "caught"
... 
caught

无论哪种方式,它都有效,尽管 Python 真的应该抛出某种异常来将字符串而不是类传递给 warnings.simplefilter

关于当从未调用 issubclass() 时,Python 在 issubclass() 上抛出 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14128251/

相关文章:

python - 划分数据框

python - os.getenv 和 os.environ 看不到我的 bash shell 的环境变量

python - 使用不同颜色绘制多个函数,包括导数

python - numpy vs 列表理解,哪个更快?

python - OpenCV错误:参数-p/-prototxt是必需的

python - 不稳定的 Popen 管道

python - 处理法语文本 Python

python - 如何在 sqlalchemy 中连接两个关于公共(public)关系的查询?

python - 在循环中 append 具有不同维度的 numpy ndarrays

Python : Ensure string is exactly in A. B.C 格式 ..(两个点分隔 3 个字符串)