繁体   English   中英

如何判断python变量中包含哪种类型的数据?

[英]How do I tell what type of data is inside python variable?

我有一个变量列表..列表中是字符串,数字和类对象。 我需要根据每种不同类型的数据执行逻辑。 我在检测类对象和分支逻辑时遇到了麻烦。

if(type(lists[listname][0]).__name__ == 'str'): # <--- this works for strings
elif(type(lists[listname][0]).__name__ == 'object'): <--- this does not work for classes

在上面的第二行代码中, name变量包含“ Address”作为类名。 我希望它包含“类”或“对象”,以便可以分支程序。 将来我将有许多不同类型的对象,因此对每个不同的类名,“地址”,“人”等执行逻辑有点不切实际。

如果我的问题需要澄清,请告诉我。

谢谢!!

仅供参考:无论是否使用新型类,这也都有所不同:

# python
type(1).__name__
'int'
type('1').__name__
'str'
class foo(object):
  pass
type(foo()).__name__
'foo'
class bar:
  pass
type(bar()).__name__
'instance'

如果可以确保它们都是新式类,则您的方法将确定实际类型。 如果您将它们设为旧样式,它将显示为“实例”。 并不是说我建议为此而将所有内容都变为旧样式。

但是,您可以更进一步:

type(bar().__class__).__name__
'classobj'
type(foo().__class__).__name__
'type'

并始终寻找“ classobj”或“ type”。 (或元类的名称,如果有的话。)

我认为您需要isinstance函数。

if isinstance(o, ClassName):

但是,您需要首先验证o是一个对象,可以为此使用type

在Python中,使用异常处理来决定采用哪个代码路径是很常见的。 不建议检查对象的确切类型(使用isinstance())以决定如何处理该对象。

例如,假设您要执行的操作是,如果它是字符串,则以“标题大小写”方式打印,如果它是对象,则要在其上调用特定的方法。 所以:

try:
    # is it an object with a particular method?
    lists[listname][0].particularMethod()
except AttributeError:
    # no, it doesn't have particularMethod(), 
    # so we expect it to be a string; print it in title case
    print lists[listname][0].title()

如果您只对专门处理两种类型感兴趣,则可以使用isinstance显式测试它们,然后处理剩余的:

import numbers

for item in list:
    if isinstance(item, basestring): # (str, unicode)
        do_string_thing(item)
    elif isinstance(item, numbers.Real): # (int, float, long)
        do_number_thing(item)
    else:
        do_object_thing(item)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM