В Python 2 вы можете использовать модуль types
:
>>> import types
>>> var = 1
>>> NumberTypes = (types.IntType, types.LongType, types.FloatType, types.ComplexType)
>>> isinstance(var, NumberTypes)
True
Обратите внимание на использование кортежа для проверки нескольких типов.
Под капотом IntType
— это просто псевдоним для int
и т. д.:
>>> isinstance(var, (int, long, float, complex))
True
Тип complex
требует, чтобы ваш Python был скомпилирован с поддержкой комплексных чисел; если вы хотите защитить это, используйте блок try/except:
>>> try:
... NumberTypes = (types.IntType, types.LongType, types.FloatType, types.ComplexType)
... except AttributeError:
... # No support for complex numbers compiled
... NumberTypes = (types.IntType, types.LongType, types.FloatType)
...
или если вы просто используете типы напрямую:
>>> try:
... NumberTypes = (int, long, float, complex)
... except NameError:
... # No support for complex numbers compiled
... NumberTypes = (int, long, float)
...
В Python 3 types
больше не имеет псевдонимов стандартных типов, complex
всегда включен, и больше нет разницы long
и int
, поэтому в Python 3 всегда используйте:
NumberTypes = (int, float, complex)
И последнее, но не менее важное: вы можете использовать numbers.Numbers
абстрактный базовый тип (новое в Python 2.6), чтобы также поддерживать пользовательские числовые типы, которые не являются прямыми производными от вышеуказанных типов:
>>> import numbers
>>> isinstance(var, numbers.Number)
True
Эта проверка также возвращает True
для объектов decimal.Decimal()
и fractions.Fraction()
.
Этот модуль предполагает, что тип complex
включен; вы получите ошибку импорта, если это не так.
person
Martijn Pieters
schedule
26.06.2012
numpy.isfinite
должен помочь. - person Jon Warneke   schedule 10.08.2016