如何测试变量的类型?

时间:2015-09-22 12:32:30

标签: python python-2.7 error-handling type-conversion

假设两个变量varA和varB被赋值,可以是数字或字符串。

编写一段Python代码,打印出以下消息之一:

  

"字符串涉及"如果varA或varB是字符串

     

"大"如果varA大于varB

     

"等于"如果varA等于varB

     

"较小"如果varA小于varB

假设已定义varAvarB,请在以下框中编写代码。

我的代码是

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

测试值:varA = -7varB = adieu 输出是:

ValueError: invalid literal for int() with base 10: 'adieu'

为什么我得到这个输出?如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果第一次测试成立,则需要跳过第二次测试。你的一个参数是一个字符串,并且该字符串不能转换为整数,因为Adieu由字母而不是数字组成。

您可以使用elif代替if

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

你根本不需要将varAvarB转换为整数,因为你的第一个测试已经确定它们都不是字符串,我碰巧知道你正在做的任务只传递字符串或整数:

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

接下来,当您可以使用type('s')直接引用该测试的结果时,您不必使用str;如果你要使用type(),你应该在这里测试身份而不是相等:

if type(varA) is str or type(varB) is str:
    print "string involved"
elif int(varA)>int(varB):
    print "bigger"
elif (int(varA)<int(varB)):
    print "smaller"
else:
    print "equal"

使用isinstance()测试类型几乎总是更好,因为这也允许子类通过测试:

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

接下来,当您可以使用type('s')直接引用该测试的结果时,您不必使用str;如果你要使用type(),你应该在这里测试身份而不是相等:

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

我强烈怀疑你的作业要求你创建一个返回结果的函数,而不是打印。在这种情况下,您需要使用return语句:

if isinstance(varA, str) or isinstance(varB, str):
    return "string involved"
elif varA > varB:
    return "bigger"
elif varA < varB:
    return "smaller"
else:
    return "equal"