首页 > 解决方案 > 在 Python 中检查多种类型以引发异常

问题描述

我正在手动尝试异常以完全理解它们,并且我创建了如下代码:

def misterio(a,b):
    if type(a) or type(b) != ("int") and ("float"):
        raise TypeError ("Arguments should be numbers" .format(a,b))
    else:

        if (b<0):
            raise ValueError ("B cant be 0")
        elif (b==1):
            return a
        else:
            return a+misterio(a,b-1)

print(misterio(3,2))
print(misterio(3,"a"))
print(misterio(3,1))

但它没有通过第一个if。我要做的就是检查我的参数是否是数字,(我知道b应该至少大于 1,但我正在一步一步地做)。有没有办法以最蟒蛇的方式做到这一点?因为我还不明白为什么它没有通过第一个if,即使两者都是int

标签: pythonconditional-statements

解决方案


你要

def misterio(a, b):
    if not all(isinstance(x, (int, float)) for x in [a, b]):
        raise TypeError("Arguments should be numbers.")
    else:

        if (b < 0):
            raise ValueError("B cant be 0")
        elif (b == 1):
            return a
        else:
            return a + misterio(a, b - 1)


print(misterio(3, 2))
print(misterio(3, "a"))
print(misterio(3, 1))

首先,使用isinstance(...)代替type(...)和第二:

if type(a) or ...

总是返回真,即使aNone

a = None

if type(a) or None:
    print("Yes")

与您的实际错误无关,但您没有使用ab在错误消息中,因此我将其省略了。


推荐阅读