Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 测试值是否为数字_Python_Regex_Testing - Fatal编程技术网

Python 测试值是否为数字

Python 测试值是否为数字,python,regex,testing,Python,Regex,Testing,我们如何编写一个测试来检查一个值是否是数字,并且在该值不是数字时抛出一个异常?在这种情况下我们需要正则表达式吗 谢谢。您可以使用数字模块 >>> import numbers >>> isinstance(1, numbers.Number) True >>> isinstance('a', numbers.Number) False 需要注意的是,复数被认为是数字的一部分。数字也是,如果你只想要实数,你可以: >>> i

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


谢谢。

您可以使用数字模块

>>> 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)
如果my_值不是实数,它将抛出断言错误。

如果“数值”实际上是字符串,那么最简单的方法当然是运行测试转换

e、 g.如果需要浮点值,请转换为
浮点值

注意:如果您只想引发一个异常,那么您可能不需要包装函数
is\u float()
。直接做作业就行了

如果您不一定要引发异常,而只是测试数值性,
is\u float()
的更一致实现将捕获错误并返回
False

  def is_float(v):
      try:
        f=float(v)
      except ValueError:
        return False
      return True

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

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

def check_numeric(x):
    if not isinstance(x, (int, float, complex)):
        raise ValueError('{0} is not numeric'.format(x))
如果参数为数值,则函数不执行任何操作。如果不是,则抛出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

不,您不需要,您可以使用
isinstance()
函数测试类型。如果您想要抛出异常,为什么还要麻烦测试呢?@PM2Ring他们只想在值不是数字时抛出异常。@user118967当然,但简单的方法是假设值是数字,如果不是,让Python引发ValueError,如umläute答案的第一个代码块所示。我明白了,@PM2Ring。EAFP是一个有趣的原理。就个人而言,我发现有时我们想要检查并提出一个异常,并给出一个更明确的信息。例如,与类似于“TypeError:unsupported operation type For-:'str'和'int'”的错误消息相比,说“Age必须是一个数字,但收到的是:'ween'”可能是更好的错误消息。前者将帮助用户纠正错误输入,尤其是当他们只是用户而不是查看代码的开发人员时。如果您要编写名为
的函数is_float
(驼峰大小写应仅用于类名,而不是函数名),则应捕获异常并返回False。@chepner,thx,将函数名更改为
is_float()
;我没有返回
False
,因为OP明确要求抛出异常;在任何情况下,我都向答案中添加了您的建议这里使用
any()
内置函数可能是个好主意。您可以传递类型的元组,因为的第二个参数和
long
不再是python 3中的类型。相应地更新了响应。也适用于
decimal.decimal
<代码>导入小数;isinstance(十进制。十进制(1.3),数字。数字)为
True
>>> 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