__all__
Python 2.7.5 中不允许使用 Unicode 文字吗?我在顶部有一个__init__.py
文件from __future__ import unicode_literals
,以及编码 utf-8。(其中还有一些 unicode 字符串,因此是未来的导入。)
为了确保在使用 导入时只有部分模块可见from mypackage import *
,我已将我的类添加到__all__
. 但我明白了TypeError: Item in ``from list'' not a string
。这是为什么?漏洞?
但是,当我将类名转换为 str in 时__all__
,它工作得很好。
[当我from mypackage import SomeClass
在下面的 run.py 中指定时它也可以工作......因为其中的项目__all__
没有被处理。]
我的包/somemodule.py:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
class SomeClass(object):
pass
我的包/ __init__
.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from .somemodule import SomeClass
__all__ = ['SomeClass']
运行.py:
# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import unicode_literals
from mypackage import *
print('yay')
为避免该错误,我将“全部”声明更改为:
__all__ = [str('SomeClass')] #pylint: disable=invalid-all-object
这当然是 pylint 抱怨的。
我的另一个选择是不导入unicode_literals
并将 init 中的所有字符串显式转换为带有u'uni string'
.