gpt4 book ai didi

python - 包的 `__all__` 的 `__init__` 中没有 Unicode?

转载 作者:太空狗 更新时间:2023-10-29 21:31:53 24 4
gpt4 key购买 nike

Python 2.7.5 中的 __all__ 中是否不允许使用 Unicode 文字?我有一个 __init__.py 文件,顶部有 from __future__ import unicode_literals,编码为 utf-8。 (其中还有一些 unicode 字符串,因此将来会导入。)

为确保在使用 from mypackage import * 导入时只有部分模块可见,我已将我的类添加到 __all__。但是我得到 TypeError: Item in ``from list'' not a string。这是为什么?错误?

但是,当我在 __all__ 中将类名转换为 str 时,它工作得很好。
[ 当我在下面的 run.py 中指定 from mypackage import SomeClass 时它也有效...因为 __all__ 中的项目未被处理。 ]


我的包/一些模块.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 并使用u'uni string' 将init 中的所有字符串显式转换为unicode。

最佳答案

不,__all__ 中不允许使用 unicode 值,因为在 Python 2 中名称是字符串,而不是 unicode 值。

您确实必须对 __all__ 中的所有字符串进行编码,或者不使用 unicode 文字。您可以单独执行此操作:

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

在 Python 3 中,变量名也是 unicode 值,因此__all__ 预期具有 unicode 字符串。

关于python - 包的 `__all__` 的 `__init__` 中没有 Unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19913653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com