当类是相同的时,isinstance返回false?

时间:2014-01-24 03:32:55

标签: python

def addError(self, e):
    if not isinstance(e, Error):
        raise ValueError('{0} is not type {0}'.format(e, Error))
    self.__errors.append(e)

消息:

ValueError:<class 'api.utils.Error'>不是类型<class 'api.utils.Error'>

2 个答案:

答案 0 :(得分:10)

您传递的是类本身,而不是该类的实例。这解释了你的问题。

>>> class A:
    pass

>>> isinstance(A, A)
False

你可能想要的是检查一个实例:

>>> isinstance(A(), A)
True

答案 1 :(得分:3)

e是类api.utils.Error,而不是类的实例。您可能想要构造一个实例。

此外,您的格式字符串有一个错误:

'{0} is not type {0}'

这忽略了format的第二个参数,并将第一个参数用于两个占位符。你很可能意味着以下几点:

'{0} is not type {1}'

或在Python 2.7上,

'{} is not type {}'