我使用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')
看起来很像样板......
答案 0 :(得分:1)
我不清楚您想通过样板代码实现什么,但是这里有检查实例类型的正确方法。
要回答您的问题以修正isinstance
检查,您只需
isinstance('foo', six.string_types)
是的,您还必须将six
库导入到要使用它的任何地方,这在处理python2 / 3代码时很常见。
顺便说一句,如果您不需要python2兼容性,而只想迁移到python3,则不需要从future
(内置)导入