1

我的代码是:

varA = 5
varB = 'dog'
if type(varB) == 'string':
    print("string involved")
elif type(varA) == 'string':
    print("string involved")
else:
    if varA > varB:
        print("bigger")
    elif varA == varB:
        print("equal")
    elif varA < varB:
        print("smaller")

我在第 8 行收到错误。如果代码已经满足 if(line3) 或 elif(line5) 的要求,我希望代码不要对第 7 行 else 语句做出反应!

另外,如何使用 'or' 方法来加入 if(line3) 和 elif(line5) 语句?

4

2 回答 2

4

尝试使用isinstance检查type

varA = 5
varB = 'dog'
if isinstance(varA, str) or isinstance(varB, str):
    print("string involved")
else:
    if varA > varB:
        print("bigger")
    elif varA == varB:
        print("equal")
    else:
        print("smaller")

在这里,您正在检查变量是否属于该str类型,如果其中任何一个是,您就知道涉及到一个字符串,因此不会执行else代码。

可以通过基本上将or两个条件组合成一行来完成,如示例中所示。这不是一个大问题,另一种模拟or语句的方法是使用any,它检查是否有任何条件True,如果是则执行:

if any((isinstance(varA, str), isinstance(varB, str))):
    # Code...

or当您拥有大型数据结构并需要进行类似比较时,这会派上用场。and等效的是,all它具有相同的语法,只是使用all而不是any

if all((isinstance(varA, str), isinstance(varB, str))):
    # This code will evaluate if all values are strings

如果你有一堆检查并且厌倦了打字isinstance,你可以通过将 ageneratoranyor结合使用来进一步捆绑该部分all

if any(isinstance(x, str) for x in (varA, varB)):
    # Code
于 2012-12-14T05:58:11.917 回答
0

发生的事情是type()返回一个类型对象,而不是字符串,因此您正在type(varB) = <type 'str'>与实际的 string进行比较string,它们并不相同。

然后你比较5和一个字符串,它会抛出一个错误,因为没有办法比较它们。

这个 SO question详细解释了一堆检查类型的不同方法。

于 2012-12-14T05:57:30.553 回答