Как проверить, является ли мой объект python числом?

В Java числовые типы все спускаются с номера, поэтому я бы использовал

(x instanceof Number).

Что такое эквивалент python?

Ответ 1

В более поздних версиях Python (версии 2.6+, в более старых версиях вы почти ограничены проверкой нескольких жесткокодированных типов), правильный способ - проверить, является ли ваша переменная экземпляром numbers.Number:

>>> import numbers
>>> import decimal
>>> [isinstance(x, numbers.Number) for x in (0, 0.0, 0j, decimal.Decimal(0))]
[True, True, True, True]

Это использует ABC и будет работать для всех встроенных числовых классов, а также для всех сторонних классов, если они стоят их соль (зарегистрирована как подклассы Number ABC). Тем не менее, во многих случаях вам не следует беспокоиться о проверке ввода вручную - Python утилит и смешивает несколько совместимых типов, как правило, работает, но при этом будет отображаться сообщение об ошибке, когда некоторая операция не имеет смысла (4 - "1"), поэтому проверка вручную очень редко необходима. Это просто бонус, вы можете добавить его при завершении этого модуля, чтобы не дотрагиваться до других с деталями реализации.

Ответ 2

Python 2: isinstance(x, (int, long, float, complex)) and not isinstance(x, bool)

Python 3: isinstance(x, (int, float, complex)) and not isinstance(x, bool)

Ответ 3

Используйте Number из модуля numbers для тестирования isinstance(n, Number) (доступно с версии 2.6).

isinstance(n, numbers.Number)

Здесь он находится в действии с различными типами чисел и одним не числом:

>>> from numbers import Number
... from decimal import Decimal
... from fractions import Fraction
... for n in [2, 2.0, Decimal('2.0'), complex(2,0), Fraction(2,1), '2']:
...     print '%15s %s' % (n.__repr__(), isinstance(n, Number))
              2 True
            2.0 True
 Decimal('2.0') True
         (2+0j) True
 Fraction(2, 1) True
            '2' False

Это, конечно, вопреки уткам. Если вас больше беспокоит то, как действует объект, а не то, что он есть, выполните свои операции так, как будто у вас есть номер, и используйте исключения, чтобы сообщить вам об этом.

Ответ 4

Конечно, вы можете использовать isinstance, но имейте в виду, что это не так, как работает Python. Python - утиный язык. Вы не должны явно проверять свои типы. A TypeError будет поднят, если был принят неверный тип.

Так что просто предположим, что это int. Не утруждайте себя проверкой.

Ответ 5

Это не так, как работает python. Просто используйте его так же, как и число, и если кто-то передает вам что-то, что не число, терпит неудачу. Это ответственность программиста за правильные типы.

Ответ 6

он работает

isinstance(TheNumber, (int,float, ...)