我正在研究一个简单的程序,它会询问天气和温度,并输出用户应穿的衣服。但是,我已经达到了要确保用户无法输入“g”度或任何其他字符串的程度。有比较变量类型的简单方法吗?换句话说,是否存在以下内容:
if (type(temp) == 'str'):
print("Invalid. Try again.")
或类似的东西不太复杂?就个人而言,我很高兴使用高级功能等等,但这对我的CS老师来说看起来很粗略。
答案 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.