为什么isinstance('foo',str)== False

时间:2016-11-07 11:45:43

标签: python string python-2.7

我使用futurize轻轻地将我的模块迁移到Python3,现在我将它放在我的文件顶部:

from builtins import str

future.types.newstr.BaseNewStr导致isinstance的错误结果:

>>> isinstance('foo', (unicode, str))
False

如何正确解决这个问题?

请注意,添加from __future__ import unicode_literals无济于事,因为isinstance是从其他地方调用的函数调用的,如果unicode_literals被正确导入,我将无法控制。

修改

我发现我可以使用它:

def foo(string):
   import six
   if isinstance(string, six.string_types):
      return six.types.StringType('bar')

看起来很像样板......

1 个答案:

答案 0 :(得分:1)

我不清楚您想通过样板代码实现什么,但是这里有检查实例类型的正确方法。 要回答您的问题以修正isinstance检查,您只需

isinstance('foo', six.string_types)

是的,您还必须将six库导入到要使用它的任何地方,这在处理python2 / 3代码时很常见。

顺便说一句,如果您不需要python2兼容性,而只想迁移到python3,则不需要从future(内置)导入