Я не понимаю вопрос.
Есть две вещи с дико отличающейся семантикой, которые можно рассматривать как "альтернативы".
Преобразование типов - это одно. Он работает с любым объектом, поддерживающим __float__
, который может быть довольно разнообразным, но немногие из них на самом деле являются числовыми.
try:
myinput = float(input)
except:
raise ValueError("input is not a well-formed number")
# at this point, input may not be numeric at all
# it may, however, have produced a numeric value
Типовое испытание - это другое. Это работает только с объектами, которые являются собственными экземплярами определенного набора классов.
isinstance(input, (float, int, long) )
# at this point, input is one of a known list of numeric types
Вот пример класса, который отвечает на float
, но все еще не числовой.
class MyStrangeThing( object ):
def __init__( self, aString ):
# Some fancy parsing
def __float__( self ):
# extract some numeric value from my thing
Вопрос "действительные числа (целые числа или числа с плавающей точкой)", как правило, не имеет значения. Многие вещи являются «числовыми» и могут использоваться в числовой операции, но не являются целыми числами или числами с плавающей запятой. Например, вы, возможно, скачали или создали пакет рациональных чисел.
Нет смысла переоценивать входные данные, если у вас нет алгоритма, который не будет работать с некоторыми типами. Они редки, но некоторые вычисления требуют целых чисел, в частности, чтобы они могли выполнять операции целочисленного деления и остатка. Для них вы можете утверждать, что ваши значения являются целыми числами.