2015-10-15 73 views
1

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

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

    print("Invalid. Try again.") 

或类似的东西不是太复杂?就我个人而言,使用高级功能和其他功能都没问题,但这对我的CS老师来说看起来很粗略。

+0

检查一下,这里有很多信息:https://docs.python.org/2/library/string.html – ergonaut

+0

请注意,在Python 3和'raw_input()'中用input()在Python 2中总是一个字符串,即使它是一串数字,所以检查类型不会告诉你任何东西。您必须尝试将字符串转换为另一种类型,例如使用正如Makoto的回答所显示的那样,“int(s)”或“float(s)”。 – deltab

回答

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!"); 

不要用类型检查不甘示弱,因为这会让你的代码少一点Python的。相反,不要害怕这段代码有机会炸毁;如果是这样,那么赶上例外并且稍后处理善后事宜。

+1

捕捉异常非常缓慢吗? – user2136963

1

Python有一个内置函数来检查变量类型。 从docs

isinstance(对象,CLASSINFO)

返回真,如果该对象参数是CLASSINFO参数的一个实例 ,或它们的(直接,间接或 虚拟)亚类的。如果classinfo类型为 对象(新样式类)并且对象是该类型的对象或 (直接,间接或虚拟)子类的对象,则也会返回true。如果对象不是 类实例或给定类型的对象,则函数始终为 将返回false。如果classinfo既不是类对象也不是类型 对象,它可能是类或类型对象的元组,或者可能递归地包含其他这样的元组(其他序列类型不被接受)。如果 classinfo不是元组,类型或元组的类,类型等元组,则会引发TypeError异常。

例如:

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

我只是碰到这个,并认为,虽然这个问题是很久以前问,对于其他用户的利益,我会把我的解决方案了。

我创建的例外类型检查赶上一个辅助功能:

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

然后在代码的主体,无论我要检查身份类型,我只是写这样的事:

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

这种方法还允许用户修改的变量类型取决于另一个变量的,由于具有这种功能,一个int将返回1和串将返回2.