我想问是否有一种方法来检查一个值是否为任何数字?可能会有"大师班"吗?为数字。我不想检查所有的情况(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))