我如何检查我的python对象是否是一个数字?

在Java中,数字types都是从Number开始的,所以我会使用

(x instanceof Number). 

什么是python等值?

在更新的Python版本中(2.6+;在旧版本中,你几乎只限于检查一些硬编码types),正确的方法是testing你的variables是否是一个数字的实例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的子类)。 但是,在很多情况下,您不必担心手动检查types – Python是鸭子types的,通常可以混合使用某些兼容types,但是当某些操作没有意义时它会禁止一个错误消息( 4 - "1" ) ,所以手动检查这是很less真正需要的。 这只是奖金,你可以在完成这个模块时添加它,以避免与实施细节纠缠在一起。

我认为这将工作:

isinstance(x, (int, long, float, complex))

使用numbers模块中的Number来testingisinstance(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 

当然,这与鸭子打字相反。 如果你更关心的是一个对象的行为而不是它是什么,就像你有一个数字一样执行你的操作,并用exception来告诉你。

这不是真正的Python如何工作。 只要像使用数字那样使用它,如果有人通过了一些不是数字的东西,就会失败。 程序员有责任传递正确的types。

当然你可以使用isinstance ,但要注意,这不是Python的工作方式。 Python是一种鸭子型语言。 你不应该明确地检查你的types。 如果传递了错误的types,将会引发TypeError

所以只是假设它是一个int 。 不要打扰检查。

它似乎工作

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