gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:08:54 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com