我们如何编写一个检查值是否为数字的测试,抛出异常的值是否为数值?在这种情况下我们需要正则表达式吗?
感谢。
答案 0 :(得分:2)
您可以使用数字模块。
>>> import numbers
>>> isinstance(1, numbers.Number)
True
>>> isinstance('a', numbers.Number)
False
应该注意的是,复数被认为是数字的一部分。数量也是如此,如果你只想要实数,你可以这样做:
>>> import numbers
>>> isinstance(1, numbers.Real)
True
>>> isinstance(1j, numbers.Real)
False
如果值不是数字,则抛出异常我会这样做:
assert isinstance(my_value, numbers.Real)
如果AssertionError
不是真实数字,那么会抛出my_value
。
答案 1 :(得分:0)
如果您的"数值"实际上是字符串,那么最简单的方法就是运行测试转换。
e.g。如果您期望浮点值,请转换为float
)
def is_float(v):
f=float(v)
return True
>>> is_float(2.2)
True
>>> is_float("3.14")
True
>>> is_float("ouch")
ValueError: could not convert string to float: ouch
注意:如果您只想提出异常,那么您可能不需要包装函数is_float()
。直接做任务......
如果您不想提出异常,只是测试数值,is_float()
的更一致的实现会捕获错误并返回False
:
def is_float(v):
try:
f=float(v)
catch ValueError:
return False
return True
答案 2 :(得分:0)
Python中有四种数字类型(int,float,long和complex)。您可以按如下方式检查它们:
ajax
如果参数是数字,则该函数不执行任何操作。如果不是,则抛出ValueError。
def check_numeric(x):
if not any([isinstance(x, int),
isinstance(x, float),
isinstance(x, long),
isinstance(x, complex)]):
raise ValueError('{0} is not numeric'.format(x))