【问题标题】:How do I compare variable types in python? [duplicate]如何比较python中的变量类型? [复制]
【发布时间】:2016-01-13 08:03:21
【问题描述】:

我正在开发一个简单的程序,它会询问天气和温度并输出用户应该穿什么衣服。但是,我已经到了要确保用户不能输入“g”度或任何其他字符串的地步。有没有一种简单的方法来比较变量类型?换句话说,有没有类似的东西:

if (type(temp) == 'str'):

    print("Invalid. Try again.")

或者不是太复杂的类似的东西?就个人而言,我可以使用高级功能之类的东西,但对于我的 CS 老师来说,这看起来很粗略。

【问题讨论】:

  • 看看这个,这里有很多信息:docs.python.org/2/library/string.html
  • 请注意,Python 3 中input() 和Python 2 中raw_input() 读取的输入始终是字符串,即使它是一串数字,因此检查类型不会告诉您任何信息.您必须尝试将字符串转换为另一种类型,例如使用int(s)float(s),正如 Makoto 的回答所示。

标签: python types


【解决方案1】:

你说的很对,只是不需要引号。

>>> type(5) == int
True
>>> type('5') == int
False
>>> type('5') == str
True

【讨论】:

    【解决方案2】:

    It's easier to beg forgiveness than to ask permission.

    考虑我们大多数人在这种情况下会做什么(假设 Python 3):

    temp = int(input("Enter a numerical input: "))
    

    如果我们得到的输入不是数字,我们会用ValueError 炸毁。知道这一点,我们应该……抓住它:

    try:
        temp = int(input("Enter a numerical input: "))
    except ValueError as e:
        print("Invalid input - please enter a whole number!");
    

    不要摆弄类型检查,因为这会使你的代码少一点 Pythonic。相反,不要害怕这段代码有机会炸毁;如果是这样,只需捕获异常并稍后处理后果。

    【讨论】:

    • 捕捉异常不是很慢吗?
    【解决方案3】:

    Python 有一个用于检查变量类型的内置函数。 来自docs

    isinstance(object, classinfo)

    如果对象参数是一个 classinfo 参数的实例,或(直接、间接或 virtual) 的子类。如果 classinfo 是一个类型,也返回 true object (新型类)并且 object 是该类型的对象或 (直接、间接或虚拟)子类。如果对象不是 类实例或给定类型的对象,函数总是 返回假。如果 classinfo 既不是类对象也不是类型 对象,它可能是类或类型对象的元组,也可能是递归的 包含其他此类元组(不接受其他序列类型)。如果 classinfo 不是类、类型或类、类型等的元组 元组,会引发 TypeError 异常。

    例如:

    >>>n=3 
    >>>isinstance(n, int)
    True
    >>>isinstance(n, str)
    False
    >>>m="example"
    >>>isinstance(m, int)
    False
    >>>isinstance(m, str)
    True
    

    【讨论】:

      【解决方案4】:

      我刚刚碰到这个,想虽然这个问题是很久以前提出的,但为了其他用户的利益,我会提出我的解决方案。

      我创建了一个辅助函数,通过异常捕获来检查类型:

      def TypeChecker(var):
          result = 1
          try:
              int(var)
         except:
              result = 2
         return 
      

      然后在代码主体中,无论我想检查类型标识的任何地方,我都只需编写如下内容:

      if TypeChecker(var1) == TypeChecker(var2):
          do_stuff...
      

      此方法还允许用户根据另一个变量的类型修改变量类型,因为使用此函数,int 将返回 1,而 string 将返回 2。

      【讨论】:

        猜你喜欢
        • 2019-01-23
        • 2018-03-20
        • 2020-04-15
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 2020-08-06
        • 2018-04-17
        • 1970-01-01
        相关资源
        最近更新 更多