23 python python-3.x
我有一个代码库,它在python2.x代码库中使用StringType和NoneType(类型模块).在移植到Python3时,测试失败,因为Python3.x中的类型模块没有上面提到的两种类型.
我通过分别用"str"和"None"替换它们来解决问题.我想知道是否还有另一种(正确的)方法.我目前所做的事情似乎肯定有效,但我很怀疑.
我应该坚持我所遵循的方法还是我做了什么错了?如果是这样,我该如何纠正?
Ale*_*yov 23
检查无通常是通过调用来完成的obj is None,而检查字符串通常是isinstance(obj, str).在Python 2.x中检测字符串和unicode,你可以使用isinstance(obj, basestring).
如果你使用2to3它就足够了,但如果你需要在Py2和Py3中使用单段代码,你可能会得到类似的东西:
try:
return isinstance(obj, basestring)
except NameError:
return isinstance(obj, str)
Run Code Online (Sandbox Code Playgroud)
如果可能,我建议您避免使用其中的值types;因此,对于诸如将方法绑定到对象这样的东西,请使用types.MethodType,但要types.StringTypes使用(str, unicode)或basestring。
对于这种情况,我会这样做:
obj is None或obj is not None而不是isinstance(obj, NoneType)或not isinstance(obj, NoneType)。isinstance(obj, basestring)而不是isinstance(obj, StringTypes)isinstance(obj, str)而不是isinstance(obj, StringType)然后,当您需要分发Python 3时,请使用2to3。然后,您basestring将成为自己str,其余的将继续像以前一样工作。
(也请记住这一点,尤其是StringType和之间的区别StringTypes:
types.UnicodeType == unicode
types.StringType == str
types.StringTypes == (str, unicode)
Run Code Online (Sandbox Code Playgroud)
)
| 归档时间: |
|
| 查看次数: |
20466 次 |
| 最近记录: |