Python 使用isinstance测试Unicode字符串
我怎样才能做到:Python 使用isinstance测试Unicode字符串,python,unicode,typechecking,Python,Unicode,Typechecking,我怎样才能做到: >>> s = u'hello' >>> isinstance(s,str) False 但是我想isinstance为这个Unicode编码的字符串返回True。是否存在Unicode字符串对象类型 是否存在Unicode字符串对象类型 是的,它被称为: 请注意,在Python3.x中,此类型已被删除,因为。对于Python2,您可以使用来测试两者: isinstance(unicode_or_bytestring, basestring
>>> s = u'hello'
>>> isinstance(s,str)
False
但是我想isinstance
为这个Unicode编码的字符串返回True
。是否存在Unicode字符串对象类型
是否存在Unicode字符串对象类型
是的,它被称为:
请注意,在Python3.x中,此类型已被删除,因为。对于Python2,您可以使用来测试两者:
isinstance(unicode_or_bytestring, basestring)
isinstance(unicode_or_bytestring, str)
basestring
仅在Python 2中可用,并且是和的抽象基类型
如果只想测试unicode
,请明确执行以下操作:
isinstance(unicode_tring, unicode)
对于Python 3,仅测试str
:
isinstance(unicode_or_bytestring, basestring)
isinstance(unicode_or_bytestring, str)
或者,如果必须处理ByTestRing,请分别测试字节数
:
这两种类型故意不可交换;使用显式编码(对于str
到bytes
)和解码(bytes
到str
)在类型之间进行转换
是否存在Unicode字符串对象类型
是的,这是有效的:
>>> s = u'hello'
>>> isinstance(s, unicode)
True
>>>
但是,只有当您知道它是unicode时,这才有用。
另一个解决方案是使用这个包,它可以避免python2.x和python3.x转换,并捕获unicode
和str
>>> unicode_s = u'hello'
>>> s = 'hello'
>>> isinstance(unicode_s, str)
False
>>> isinstance(unicode_s, unicode)
True
>>> isinstance(s, str)
True
>>> isinstance(unicode_s, str)
False
>>> isinstance(s, six.string_types)
True
>>> isinstance(unicode_s, six.string_types)
True
type(s)
会很容易地告诉您类型。。。但是你为什么要打字?你真的只在寻找unicode
对象,或者任何具有类似字符串接口的对象吗?@Anthony:的确,unicode
是Python 2特有的。在Python3中,使用str
。因此,如果我在Python2.7或Python3中检查basestring
,我将得到相同的结果?@Gulzar:我的回答是:basestring仅在Python2中可用。所以不。好吧,你会如何写这篇文章,使之与python 2和3兼容?@Gulzar:取决于上下文。如果您想允许文本,那么可以使用名称错误保护:尝试:strtype=basestring
,除了名称错误:strtype=str
,然后使用isinstance(…,strtype)
。这正是我要找的。如果你想让代码兼容python2和pytho3。