Python — isinstance возвращает false

У меня проблема с isinstance().

Я использую Python 2.7.8 и запускаю скрипты из оболочки.

Элемент 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))

Я также пробовал это решение не сработало.

Все возвращают ложь.


person JasTonAChair    schedule 12.04.2015    source источник
comment
Что производит print repr(array[x][i]), type(array[x][i])?   -  person Martijn Pieters    schedule 12.04.2015
comment
каков результат type(array[x][i]) ?   -  person karthikr    schedule 12.04.2015
comment
Например, у вас может быть string; если array[x][i] хранит '1', то print выдаст тот же результат.   -  person Martijn Pieters    schedule 12.04.2015


Ответы (1)


У вас нет номера; у вас скорее всего есть строка, содержащая цифру '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
person Martijn Pieters    schedule 12.04.2015
comment
Спасибо, что поместили это в контекст. Это только выглядело как целое число. - person JasTonAChair; 12.04.2015