我正在尝试检查变量数据是字符串还是整数类型,以便我可以对它进行处理。如果它没有上述它应该返回false。我曾尝试使用isinstance
,但它要求数据属于两种类型,这是不可能的。有没有更好的方法呢?
这是我的代码:
if isinstance(data(int, str)):
return True
else:
return false
答案 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个参数,第一个是你要检查的变量,第二个是要检查它是否是实例的数据类型/类(在你的情况下) int
或str
)。 This tutorial解释得很清楚。