测试一个值是否是数字

Sim*_*ity -1 python regex testing

我们如何编写一个测试来检查一个值是否为数字,并在该值不是数字时抛出异常?在这种情况下我们需要正则表达式吗?

谢谢。

Cra*_*sta 7

您可以使用数字模块。

>>> import numbers
>>> isinstance(1, numbers.Number)
True
>>> isinstance('a', numbers.Number)
False
Run Code Online (Sandbox Code Playgroud)

应该注意的是,复数也被认为是 numbers.Number 的一部分,如果你只想要实数,你可以这样做:

>>> import numbers
>>> isinstance(1, numbers.Real)
True
>>> isinstance(1j, numbers.Real)
False
Run Code Online (Sandbox Code Playgroud)

至于如果值不是数字则抛出异常,我会这样做:

assert isinstance(my_value, numbers.Real)
Run Code Online (Sandbox Code Playgroud)

AssertionError如果my_value不是实数,它将抛出。


Ale*_*der 5

Python 3 中有三种不同的数字类型(int、float 和complex)。请注意,boolean 是 int 的子类。

您可以按如下方式检查它们:

def check_numeric(x):
    if not isinstance(x, (int, float, complex)):
        raise ValueError('{0} is not numeric'.format(x))
Run Code Online (Sandbox Code Playgroud)

如果参数是数字,则该函数不执行任何操作。如果不是,则会抛出 ValueError。

>>> check_numeric(1)

>>> check_numeric(True)

>>> check_numeric(1.5)

>>> check_numeric(10L)

>>> check_numeric(complex(1, 2))

>>> check_numeric('spam')
ValueError: spam is not numeric
Run Code Online (Sandbox Code Playgroud)