为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查变量是否为数字(没有数字)并在 Python 中不存在时引发错误?

如何检查变量是否为数字(没有数字)并在 Python 中不存在时引发错误?

慕田峪4524236 2023-01-04 14:26:02
我不明白为什么当半径或高度是浮点数时以下内容无法正确运行并引发错误。def cone(radius, height):    if isinstance(radius, int) or isinstance(radius,float) == False:        raise TypeError("Error: parameters radius and height must be numeric.")    if isinstance(height, int) or isinstance (height,float)== False:        raise TypeError("Error: parameters radius and height must be numeric.")    if radius > 0 and height > 0:            return ((radius*radius)*(3.1415)*(height/3))    if radius<=0:        raise ValueError("Error: radius must be positive.")    if height <=0:        raise ValueError("Error: height must be positive.")
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

好像你想要

if not (isinstance(radius, int) or isinstance(radius,float)):

或者实际上

if not isinstance(radius, (float, int)):

目前你的逻辑是这样的

if isinstance(radius, int) or (isinstance(radius,float) == False):

所以,如果你有一个 int,那么你就会得到错误。如果你得到一个浮动,你就不会出错,因为你最终得到False or (True == False)

任何事物or False都等同bool(Anything)于 ,在本例中,True == False,即False

此外,我建议首先提出所有错误并检查条件。

然后只返回实际的数学,因为那时变量不可能是正的


查看完整回答
反对 回复 2023-01-04
?
慕神8447489

TA贡献1780条经验 获得超1个赞

您可以将多种类型传递给isinstance,这样您就可以摆脱or:


def cone(radius, height):

    if not isinstance(radius, (float, int)):

        raise TypeError("Error: parameters radius and height must be numeric.")

    if not isinstance(height, (float, int)):

        raise TypeError("Error: parameters radius and height must be numeric.")


    if radius > 0 and height > 0:

            return ((radius*radius)*(3.1415)*(height/3))

    if radius<=0:

        raise ValueError("Error: radius must be positive.")

    if height <=0:

        raise ValueError("Error: height must be positive.")


for value in [(1, 2), (0.33, 'foo')]:

    print(cone(*value))

输出:


0.0

Traceback (most recent call last):

  File "/private/tmp/s.py", line 15, in <module>

    print(cone(*value))

  File "/private/tmp/s.py", line 5, in cone

    raise TypeError("Error: parameters radius and height must be numeric.")

TypeError: Error: parameters radius and height must be numeric.


查看完整回答
反对 回复 2023-01-04
?
心有法竹

TA贡献1866条经验 获得超5个赞

您的问题是if被评估为:


if (isinstance(radius, int)) or (isinstance(radius,float) == False)

我想这不是你的意思。


无论如何,您实际上可以通过使用try/except. 您可以假设您的参数是数字并与 进行比较0。如果不是,将引发异常以便您可以捕获它:


def cone(radius, height):

    try:

        if radius > 0 and height > 0:

            return ((radius*radius)*(3.1415)*(height/3))

        else:

            raise ValueError("Error: radius and height must be positive.")


    except TypeError:

        raise TypeError("Error: parameters radius and height must be numeric.")


查看完整回答
反对 回复 2023-01-04
  • 3 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信