检查varible是string类型还是int类型

时间:2017-02-24 10:15:35

标签: python types

我正在尝试检查变量数据是字符串还是整数类型,以便我可以对它进行处理。如果它没有上述它应该返回false。我曾尝试使用isinstance,但它要求数据属于两种类型,这是不可能的。有没有更好的方法呢? 这是我的代码:

     if isinstance(data(int, str)):
         return True
     else:
         return false

3 个答案:

答案 0 :(得分:3)

您可以使用布尔or

>>> isinstance(3,int) or isinstance(3,str)
True
>>> isinstance("3",int) or isinstance("3",str)
True
>>> isinstance([3],int) or isinstance([3],str)
False

或指定可能类型的元组:

>>> isinstance(3, (int, str))
True
>>> isinstance("3", (int, str))
True
>>> isinstance([3], (int, str))
False

所以在你的情况下,它不会是:

isinstance(data(int, str))

isinstance(data, (int, str))

答案 1 :(得分:3)

事实上,你可以使用一组类作为isinstance的第二个参数。

isinstance(var,(list,int))

isinstance(object,classinfo)

  

如果classinfo是类或类型对象的元组(或递归,   其他这样的元组),如果object是任何一个的实例,则返回true   类或类型。如果classinfo不是class,type或tuple   类,类型和此类元组会引发TypeError异常。

答案 2 :(得分:1)

您可以使用 isinstance(object,classinfo)内置函数。

This应该完成这项工作

def isStrOrInt(myVar):
  return isinstance(myVar,int) or isinstance(myVar,str)


print(isStrOrInt(5))   # True
print(isStrOrInt('5')) # True
print(isStrOrInt([]))  # False
print(isStrOrInt('Dinosaurs are Awesome!')) # True
print(isStrOrInt(3.141592653589793238462 )) # False (Because it's a decimal not an int)

以下是正在运行的版本:https://repl.it/Fw63/1

这是documentation所说的:

  

如果object参数是classinfo的实例,则返回true   参数,或其(直接,间接或虚拟)子类。如果   object不是给定类型的对象,函数总是返回   假。如果classinfo是类型对象的元组(或递归,其他   这样的元组),如果object是任何一个的实例,则返回true   类型。如果classinfo不是类型和类型元组的类型或元组,则a   引发TypeError异常。

基本上,isinstance需要2个参数,第一个是你要检查的变量,第二个是要检查它是否是实例的数据类型/类(在你的情况下) intstr)。 This tutorial解释得很清楚。