【问题标题】:How to test the type of variable?如何测试变量的类型?
【发布时间】:2015-09-22 12:32:30
【问题描述】:

假设两个变量 varA 和 varB 被赋值,要么是数字要么是字符串。

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

如果 varA 或 varB 是字符串,则“涉及字符串”

如果 varA 大于 varB,则为“更大”

"equal" 如果 varA 等于 varB

"smaller" 如果 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'

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

【问题讨论】:

  • varB = adieu 是指varB = 'adieu' 吗?你为什么使用 type 平等而不是例如isinstance(varA, basestring)?
  • int(varA) 尝试将您的字符串转换为 int。如果您的第一个条件为真,这是不可能的。如果您将第二个“if”更改为“elif”,它将不再尝试此操作

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


【解决方案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 转换为整数,因为您的 first 测试已经确定两者都不是字符串,而且我碰巧知道您的分配只传递字符串或整数:

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"

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

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"

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

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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2018-04-21
    • 1970-01-01
    • 2017-01-02
    • 2017-08-06
    • 1970-01-01
    • 2013-02-13
    相关资源
    最近更新 更多