当类相同时,isinstance返回false吗?

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

信息:

值错误: <class 'api.utils.Error'> 不是类型 <class 'api.utils.Error'>


等等……这是什么鬼? - user2357112
等一下..如果它被打印出来,那么 isinstance(e, Error) 返回 True 吗? - aIKid
抱歉,我正在调试……我粘贴了代码。 - slik
@aiKid,我会将你的答案标记为正确的,因为我读了一遍后双重检查了我的工作,发现我传递的是“Error”而不是变量“error”。谢谢。 - slik
2个回答

11

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

>>> class A:
    pass

>>> isinstance(A, A)
False

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

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

3
e是类api.utils.Error,而不是类的实例。您可能需要构造一个实例。
此外,您的格式字符串有一个错误:
'{0} is not type {0}'

这个代码忽略了 format 的第二个参数,并且将第一个参数用于两个占位符。你可能想要使用以下代码:

'{0} is not type {1}'

或者在Python 2.7上,

'{} is not type {}'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接