我正在研究一个简单的程序,它会询问天气和温度,并输出用户应穿的衣服。但是,我已经到了要确保用户无法输入“g”度或任何其他字符串的程度。有没有简单的方法来比较变量类型?换句话说,是否有沿线的东西:如何比较python中的变量类型?
if (type(temp) == 'str'):
print("Invalid. Try again.")
或类似的东西不是太复杂?就我个人而言,使用高级功能和其他功能都没问题,但这对我的CS老师来说看起来很粗略。
我正在研究一个简单的程序,它会询问天气和温度,并输出用户应穿的衣服。但是,我已经到了要确保用户无法输入“g”度或任何其他字符串的程度。有没有简单的方法来比较变量类型?换句话说,是否有沿线的东西:如何比较python中的变量类型?
if (type(temp) == 'str'):
print("Invalid. Try again.")
或类似的东西不是太复杂?就我个人而言,使用高级功能和其他功能都没问题,但这对我的CS老师来说看起来很粗略。
你几乎没错,只是不需要报价。
>>> type(5) == int
True
>>> type('5') == int
False
>>> type('5') == str
True
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的。相反,不要害怕这段代码有机会炸毁;如果是这样,那么赶上例外并且稍后处理善后事宜。
捕捉异常非常缓慢吗? – user2136963
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
我只是碰到这个,并认为,虽然这个问题是很久以前问,对于其他用户的利益,我会把我的解决方案了。
我创建的例外类型检查赶上一个辅助功能:
def TypeChecker(var):
result = 1
try:
int(var)
except:
result = 2
return
然后在代码的主体,无论我要检查身份类型,我只是写这样的事:
if TypeChecker(var1) == TypeChecker(var2):
do_stuff...
这种方法还允许用户修改的变量类型取决于另一个变量的,由于具有这种功能,一个int将返回1和串将返回2.
检查一下,这里有很多信息:https://docs.python.org/2/library/string.html – ergonaut
请注意,在Python 3和'raw_input()'中用input()在Python 2中总是一个字符串,即使它是一串数字,所以检查类型不会告诉你任何东西。您必须尝试将字符串转换为另一种类型,例如使用正如Makoto的回答所显示的那样,“int(s)”或“float(s)”。 – deltab