Python 对于一个包';s`\uuu初始化`?
Python 2.7.5中的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
\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中,这一限制被取消了。那是有道理的。事实上,这是一个好主意。