如何知道变量是元组,字符串还是整数?

时间:2011-08-17 01:21:38

标签: python

我试图在连接操作中将字符串添加到另一个字符串时找出类型不匹配。

基本上返回的错误是TypeError(不能连接字符串和元组);所以我想弄清楚我在哪里指定一个值作为元组而不是字符串。

我指定的所有值都是字符串,所以我必须弄清楚元组的来源,所以我希望Python中有一种方法可以找出变量中包含的内容以及它的类型。

到目前为止,使用pdb我能够检查变量的内容,并且正确地得到了我期望的值;但我想知道变量的类型(通过逻辑,如果编译器能够引发类型错误,则意味着它知道变量内部是什么以及它是否与要执行的操作兼容;所以必须是一种获得该值/标志的方法。

有没有办法在python中打印出变量的类型?

顺便说一句,我试图将所有变量更改为显式字符串,但是强制str (myvar)是不可行的,所以我不能在任何地方使用字符串转换为字符串类型。

7 个答案:

答案 0 :(得分:133)

isinstance(obj, tuple)
isinstance(obj, basestring)
isinstance(obj, int)

答案 1 :(得分:38)

你只需使用:

type(varname)

将输出int,str,float等...

答案 2 :(得分:21)

利用isinstance?

if isinstance(var, int):

if isinstance(var, str):

if isinstance(var, tuple):

答案 3 :(得分:5)

请注意,如果您想检查if语句中的var类型,那么构造 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); routes.MapSpaFallbackRoute( name: "spa-fallback", defaults: new { controller = "Home", action = "Index" }); }); 无效。但这些将:

if type(varname) == "tuple":

答案 4 :(得分:4)

您可能希望使用isinstance(obj, basestring)进行测试(假设Python 2.x)。您可以选择使用isinstancetype并调用属性__class__,但isinstance可能是您想要的。{1}}。请查看this article以更彻底地处理这三个选项之间的差异。

答案 5 :(得分:1)

repr(object)将给出对象的文本描述,该对象应显示类型和值。您可以在调试器中打印或查看。

对于简单值,repr通常返回与在代码中按字面意思写入值相同的字符串。对于自定义类,它给出了类名和对象id,如果是class'es

,则为其他内容
__repr__

被覆盖。

答案 6 :(得分:-1)

为补充Goujon's answer,请考虑以下混合整数和元组的列表:

for f in fills:
    print (type(f), f)
    if type(f)==int : print "INTEGER!!!"

生成此输出:

(<type 'int'>, 0)
INTEGER!!!
(<type 'tuple'>, (62973, 39058, 25708, 102))
(<type 'int'>, 1)
INTEGER!!!
(<type 'tuple'>, (16968, 12069, 3329, 102))
(<type 'int'>, 2)
INTEGER!!!
(<type 'tuple'>, (24939, 62205, 30062, 102))
(<type 'tuple'>, (32911, 32911, 0, 153))
(<type 'tuple'>, (32911, 0, 0, 153))
(<type 'tuple'>, (32911, 0, 32911, 153))
(<type 'tuple'>, (65535, 0, 0, 153))
(<type 'tuple'>, (0, 0, 65535, 153))
(<type 'tuple'>, (0, 32911, 0, 153))
(<type 'tuple'>, (0, 65535, 65535, 153))

因此,秘密不是测试"int"字符串,而是测试int关键字。如果您像我一样,并且正在从Bash脚本世界迁移,那么在Python脚本世界中使用==测试可能是您的第一步。