如何比较python中的变量类型? [复制]

Posted

技术标签:

【中文标题】如何比较python中的变量类型? [复制]【英文标题】:How do I compare variable types in python? [duplicate] 【发布时间】:2016-01-13 08:03:21 【问题描述】:

我正在开发一个简单的程序,它会询问天气和温度并输出用户应该穿什么衣服。但是,我已经到了要确保用户不能输入“g”度或任何其他字符串的地步。有没有一种简单的方法来比较变量类型?换句话说,有没有类似的东西:

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

    print("Invalid. Try again.")

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

【问题讨论】:

看看这个,这里有很多信息:docs.python.org/2/library/string.html 请注意,Python 3 中input() 和Python 2 中raw_input() 读取的输入始终是字符串,即使它是一串数字,因此检查类型不会告诉您任何信息.您必须尝试将字符串转换为另一种类型,例如使用int(s)float(s),正如 Makoto 的回答所示。 【参考方案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!");

不要摆弄类型检查,因为这会使你的代码少一点 Pythonic。相反,不要害怕这段代码有机会炸毁;如果是这样,只需捕获异常并稍后处理后果。

【讨论】:

捕捉异常不是很慢吗?【参考方案3】:

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

isinstance(object, classinfo)

如果对象参数是一个 classinfo 参数的实例,或(直接、间接或 virtual) 的子类。如果 classinfo 是一个类型,也返回 true object (新型类)并且 object 是该类型的对象或 (直接、间接或虚拟)子类。如果对象不是 类实例或给定类型的对象,函数总是 返回假。如果 classinfo 既不是类对象也不是类型 对象,它可能是类或类型对象的元组,也可能是递归的 包含其他此类元组(不接受其他序列类型)。如果 classinfo 不是类、类型或类、类型等的元组 元组,会引发 TypeError 异常。

例如:

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

【讨论】:

【参考方案4】:

我刚刚碰到这个,想虽然这个问题是很久以前提出的,但为了其他用户的利益,我会提出我的解决方案。

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

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

然后在代码主体中,无论我想检查类型标识的任何地方,我都只需编写如下内容:

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

此方法还允许用户根据另一个变量的类型修改变量类型,因为使用此函数,int 将返回 1,而 string 将返回 2。

【讨论】:

以上是关于如何比较python中的变量类型? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中将字符串变量转换为字节类型? [复制]

检查 Python 变量类型的最佳(惯用)方法是啥? [复制]

如何将结构字段与C中的变量进行比较? [复制]

如何通过JNI将java中的对象的地址赋值给c++指针变量

有没有办法使比较运算符成为变量? [复制]

如何从同一项目中的另一个类访问主类中的变量? [复制]