How do I compare variable types in python?
我正在开发一个简单的程序,它将询问天气和温度,并输出用户应该穿什么样的衣服。但是,我已经到了要确保用户不能输入"g"度或任何其他字符串的地步。有比较变量类型的简单方法吗?换句话说,是否存在以下方面的问题:
1 2 3 | if (type(temp) == 'str'): print("Invalid. Try again.") |
或者类似的事情不太复杂?就我个人而言,我可以使用高级功能和其他功能,但对我的CS老师来说,这看起来很粗略。
请求宽恕比请求许可更容易。
考虑一下我们中的大多数人在这个场景中会做什么(假设使用python 3):
1 | temp = int(input("Enter a numerical input:")) |
如果我们得到的输入不是数字,我们将用一个
1 2 3 4 | try: temp = int(input("Enter a numerical input:")) except ValueError as e: print("Invalid input - please enter a whole number!"); |
不要乱动类型检查,因为这会使代码少一些Python。相反,不要担心这段代码有可能爆炸;如果有,就抓住异常,稍后再处理后果。
你基本上是对的,只是不需要报价。
1 2 3 4 5 6 | >>> type(5) == int True >>> type('5') == int False >>> type('5') == str True |
python有一个用于检查变量类型的内置函数。从文档
isinstance(object, classinfo)
Return true if the object argument is an
instance of the classinfo argument, or of a (direct, indirect or
virtual) subclass thereof. Also return true if classinfo is a type
object (new-style class) and object is an object of that type or of a
(direct, indirect or virtual) subclass thereof. If object is not a
class instance or an object of the given type, the function always
returns false. If classinfo is neither a class object nor a type
object, it may be a tuple of class or type objects, or may recursively
contain other such tuples (other sequence types are not accepted). If
classinfo is not a class, type, or tuple of classes, types, and such
tuples, a TypeError exception is raised.
例如:
1 2 3 4 5 6 7 8 9 10 | >>>n=3 >>>isinstance(n, int) True >>>isinstance(n, str) False >>>m="example" >>>isinstance(m, int) False >>>isinstance(m, str) True |
我刚遇到这个问题,觉得尽管这个问题很久以前就被问到了,但是为了其他用户的利益,我会提出我的解决方案。
我创建了一个助手函数,通过异常捕获检查类型:
1 2 3 4 5 6 7 | def TypeChecker(var): result = 1 try: int(var) except: result = 2 return |
然后在代码主体中,只要我想检查类型标识,就只需编写如下内容:
1 2 | if TypeChecker(var1) == TypeChecker(var2): do_stuff... |
此方法还允许用户根据另一个变量的类型修改变量类型,因为使用此函数,int将返回1,字符串将返回2。