Python 对于一个包';s`\uuu初始化`?

Python 对于一个包';s`\uuu初始化`?,python,python-2.7,unicode,python-import,Python,Python 2.7,Unicode,Python Import,Python 2.7.5中的\uuuuu all\uuuuu中是否不允许使用Unicode文本?我有一个\uuuuu init\uuuuuuuuuuuuuupy文件,上面有from\uuuuuuu future\uuuuuuuuuu导入unicode\u文本,以及编码utf-8。(其中还包含一些unicode字符串,因此将来需要导入。) 为了确保在使用mypackage import*中的导入时,只有部分模块可见,我已将我的类添加到\uuuuuuuAll\uuuuuu。但是我得到了TypeErr

Python 2.7.5中的
\uuuuu all\uuuuu
中是否不允许使用Unicode文本?我有一个
\uuuuu init\uuuuuuuuuuuuuupy
文件,上面有
from\uuuuuuu future\uuuuuuuuuu导入unicode\u文本
,以及编码utf-8。(其中还包含一些unicode字符串,因此将来需要导入。)

为了确保在使用mypackage import*中的
导入时,只有部分模块可见,我已将我的类添加到
\uuuuuuuAll\uuuuuu
。但是我得到了
TypeError:“`from list”中的项不是字符串。为什么呢?臭虫

然而,当我在
\uuuu all\uuuu
中将类名强制转换为str时,它工作得很好。
[当我在下面的run.py中指定mypackage import SomeClass中的
时,它也会起作用……因为
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


mypackage/somemodule.py:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

class SomeClass(object):
    pass
mypackage/
\uuuuu init\uuuuu
.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from .somemodule import SomeClass

__all__ = ['SomeClass']
run.py:

# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import unicode_literals
from mypackage import *

print('yay')
为了避免此错误,我将“all”声明更改为:

__all__ = [str('SomeClass')] #pylint: disable=invalid-all-object
当然,派林特对此表示不满


我的另一个选择是导入
unicode\u文本
,并使用
u'uni string'

显式地将init中的所有字符串转换为unicode,因为在Python中,名称是字符串,而不是unicode值

实际上,您必须将所有字符串编码为
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,或者不使用unicode文本。您可以将其作为一个单独的步骤:

__all__ = ['SomeClass']
__all__ = [n.encode('ascii') for n in __all__]

在Python3中,变量名也是unicode值,因此
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?从
\uuuu all\uuuu
列表中获取的名称仍然来自unicode字符串,而不是ascii字符串(即使在这两种情况下,都只使用ascii字符)?@aneroid:在Python 3中,Python名称也是unicode的。在Python2中,名称只能使用ASCII,而在Python3中,这一限制被取消了。那是有道理的。事实上,这是一个好主意。