检查一个值是否为Python中的任意数字



我想问是否有一种方法来检查一个值是否为任何数字?可能会有"大师班"吗?为数字。我不想检查所有的情况(int, float, complex)。如果没有,也没有问题。

在我的特定代码中,我现在只是检查每个case,然后检查是否为NaN,但这真的很烦人。

我对数据结构有一个类似的问题:是否有一种方法可以返回一个值是list, tuple, dict还是set中的任何一个?现在我也每次都检查。基本上我的代码是这样的:

try:
value
if value==None:         #none
raise Exception("Your value is none")
elif isinstance(value,str):
if not value.isnumeric():   #real String
return value
else:               #number String
return (float(value))
elif isinstance(value,float):
if math.isnan(value): #nan
raise Exception("Your number is NaN")
elif abs(value)>abs(int(value)): #real float
pass #to-do deal with "real" floats 
else: #integer
return int(value)
elif isinstance(value,int):     #int
if math.isnan(value): #nan
raise Exception("Your number is NaN")
else:
return value
elif isinstance(value,tuple):
pass #to-do recursion
elif isinstance(value,list):
pass #to-do recursion
elif isinstance(value,dict):
pass #to-do recursion
elif isinstance(value,set):
return ("This tool does not support sets yet")
except NameError: #undefined
raise Exception("Your value is undefined")

但是我觉得如果有一个isnumeric()方法可以为所有的值而不仅仅是字符串,就像在php中一样,它会更好。

在我的研究中,我只能找到字符串isnumeric()方法或明显的type()isinstance()方法。

请帮助我,但不要告诉我没有更好的解决办法。

如果您愿意添加导入,可以这样做:

import numbers
variable = 5
print(isinstance(variable, numbers.Number))

对于第二个问题,执行

x = {}
print(type(x) in [list, dict, tuple, set])

你想试试这个吗:(来自S/O早期的帖子什么是最python的方法来检查一个对象是否是一个数字?)

>>> 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(f'{n!r:>14} {isinstance(n, Number)}')

2 True
2.0 True
Decimal('2.0') True
(2+0j) True
Fraction(2, 1) True
'2' False

Via https://stackabuse.com/python-check-if-variable-is-a-number/:

import numbers
variable = 5
print(isinstance(5, numbers.Number))

最新更新