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。