2015-04-12 5 views
3

У меня проблема с isinstance().Python - isinstance возвращает false

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

Элемент array, который я тестирую, содержит число, но эта функция возвращает false; используя number.Numbers:

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

попытался Также это от this post

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

Из той же должности, я попытался

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

Я также попытался this solution не работал.

Все возвратить false.

+2

Что 'печать магнезии (массив [х] [я]), тип (массив [х] [я])' производить ? –

+0

Что такое вывод 'type (array [x] [i])'? – karthikr

+0

Например, у вас может быть * строка *; если 'array [x] [i]' хранит ''1'', тогда' print' будет выдавать тот же самый результат. –

ответ

6

У вас нет номера; Вы скорее всего есть строка вместо, содержащей цифры '1':

>>> value = '1' 
>>> print value 
1 
>>> print 1 
1 

Это не число; вместо этого это строка. Обратите внимание, что печатает, что строка неотличима от печати целого числа.

Использование repr() распечатать Python представлений вместо этого, и/или использовать type() function для создания объекта типа для заданного значения:

>>> print repr(value) 
'1' 
>>> print type(value) 
<type 'str'> 

Теперь ясно, что значение является строкой, не целое число, хотя оно выглядит то же самое при печати.

Для реальных числовых значений, isinstance() вместе с numbers.Number работает, как ожидалось:

>>> from numbers import Number 
>>> isinstance(value, Number) 
False 
>>> isinstance(1, Number) 
True 
+0

Спасибо, что применили это в контексте. Он выглядел только как целое. – JasTonAChair

Смежные вопросы