Python - isinstance返回false

3

我遇到了一个与isinstance()相关的问题。

我正在使用Python 2.7.8,并从shell运行脚本。

我要测试的array元素包含一个数字,但这个函数返回false;可以使用number.Numbers

import numbers
...
print array[x][i] 
>> 1
...
print isinstance(array[x][i], numbers.Number)
>>> False

还尝试了这个,来自这篇文章

import types
...
print isinstance(array[x][i], (types.IntType, types.LongType, types.FloatType, types.ComplexType))
>>> False

从同一篇文章中,我尝试了

isinstance(array[x][i], (int, float, long, complex))

我也尝试了这个解决方案,但是并没有成功。
所有的结果都返回false。

2
print repr(array[x][i]), type(array[x][i])会产生什么输出? - Martijn Pieters
type(array[x][i]) 的输出是什么? - karthikr
你可以有一个字符串,例如; 如果 array[x][i] 存储了 '1',那么 print 将产生完全相同的输出。 - Martijn Pieters
1个回答

8
你没有一个数字;你很可能有一个字符串,其中包含数字 '1'。
>>> value = '1'
>>> print value
1
>>> print 1
1

这不是一个数字,而是一个字符串。请注意,打印该字符串与打印整数无法区分。
使用repr()来打印Python表示形式,和/或使用type()函数来生成给定值的类型对象:
>>> print repr(value)
'1'
>>> print type(value)
<type 'str'>

现在很明显这个值是一个字符串,而不是整数,尽管打印出来看起来一样。

对于实际的数字值,isinstance()numbers.Number 一起按预期工作:
>>> from numbers import Number
>>> isinstance(value, Number)
False
>>> isinstance(1, Number)
True

谢谢您将其放在上下文中。它只是看起来像一个整数。 - JasTonAChair

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