首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当issubclass()从未被调用时,Python会在issubclass()上抛出TypeError

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

Stack Overflow用户
提问于 2013-01-02 19:51:35
回答 1查看 1.7K关注 0票数 9

我有一段代码,大部分时间运行得很完美,但是偶尔也会在回溯中看到这个错误:

代码语言:javascript
复制
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抛出的,即(新)行

代码语言:javascript
复制
tmp = numpy.log(2. * numpy.pi * sm2)

但是,错误消息中没有提供更多的信息。

更多更新:

我当前版本的Numpy (来自Python提示符):

代码语言:javascript
复制
>>> import numpy
>>> numpy.__version__
'1.6.2'

我把问题线改为

代码语言:javascript
复制
try:
    tmp = numpy.log(2. * numpy.pi * sm2)
except TypeError:
    print type(sm2), 2. * numpy.pi * sm2

得到了输出

代码语言:javascript
复制
<type 'numpy.float64'> 0.0

因此,这是合理的,可能会有某种错误,但如果我这样做(在Python提示符下)

代码语言:javascript
复制
>>> import numpy
>>> numpy.log(0.)

我得到了我所期望的错误(并且已经通过warning模块在所讨论的代码中处理):

代码语言:javascript
复制
__main__:1: RuntimeWarning: divide by zero encountered in log
-inf
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-02 22:27:27

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

代码语言:javascript
复制
>>> 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的替代方法:

代码语言:javascript
复制
>>> 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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14128251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档