相关疑难解决方法(0)

unicode_literals和type()

我在type()调用时支持python2和python3时遇到问题.这证明了这个问题:

from __future__ import unicode_literals

name='FooClass'
type(name, (dict,), {})
Run Code Online (Sandbox Code Playgroud)

python3没问题,但在python2上:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    type(name, (dict,), {})
TypeError: type() argument 1 must be string, not unicode
Run Code Online (Sandbox Code Playgroud)

这与在Python 2.6中使用unicode_literals的Any gotchas有关吗?.在那个问题中,有人建议对一个字节串进行类型转换,所以天真地考虑使用six.b():

一个"假的"字节文字.数据应始终是正常的字符串文字.在Python 2中,b()返回一个8位字符串.在Python 3中,数据使用latin-1编码编码为字节.

所以它看起来像这样:

from __future__ import unicode_literals
import six

name='FooClass'
type(six.b(name), (dict,), {})
Run Code Online (Sandbox Code Playgroud)

但它在python2和python3上都失败了:

$ python2 test.py 
Traceback (most recent call last):
  File "test.py", line 6, in <module>
    type(six.b(name), (dict,), {})
TypeError: type() argument 1 …
Run Code Online (Sandbox Code Playgroud)

python python-2.x python-3.x six-python

12
推荐指数
1
解决办法
3561
查看次数

标签 统计

python ×1

python-2.x ×1

python-3.x ×1

six-python ×1