如何比较python中的变量类型?

时间:2015-10-15 02:23:58

标签: python types

我正在研究一个简单的程序,它会询问天气和温度,并输出用户应穿的衣服。但是,我已经达到了要确保用户无法输入“g”度或任何其他字符串的程度。有比较变量类型的简单方法吗?换句话说,是否存在以下内容:

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

    print("Invalid. Try again.")

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

4 个答案:

答案 0 :(得分:3)

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。相反,不要害怕这段代码有机会爆炸;如果确实如此,只需捕捉异常并稍后处理后果。

答案 1 :(得分:2)

你几乎没事,只需要报价。

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

答案 2 :(得分:1)

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

  

isinstance(object,classinfo)

     

如果object参数是a,则返回true   classinfo参数的实例,或a(直接,间接或   虚拟)其子类。如果classinfo是一个类型,也返回true   object(新式类)和object是该类型或对象的对象   (直接,间接或虚拟)子类。如果对象不是   类实例或给定类型的对象,该函数始终   返回false。如果classinfo既不是类对象也不是类型   对象,它可以是类或类型对象的元组,也可以是递归的   包含其他此类元组(不接受其他序列类型)。如果   classinfo不是类,类型等的类,类型或元组   元组,引发了一个TypeError异常。

例如:

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

答案 3 :(得分:0)

我刚刚遇到这个问题,并认为虽然很久以前就提出过这个问题,为了其他用户的利益,我会提出解决方案。

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

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

然后在代码的主体中,无论我想要检查类型标识,我只需写下这样的内容:

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

这种方法还允许用户根据另一个变量修改变量类型,因为使用此函数,int将返回1,字符串将返回2.