__all__
Python 2.7.5ではUnicodeリテラルは許可されていませんか? utf-8のコーディングとともに、上部に__init__.py
ファイルがあります。from __future__ import unicode_literals
(その中にはいくつかの Unicode 文字列も含まれているため、将来のインポートになります。)
を使用してインポートしたときに一部のモジュールのみが表示されるようにするためにfrom mypackage import *
、クラスを に追加しました__all__
。しかし、私は得るTypeError: Item in ``from list'' not a string
。何故ですか?バグ?
ただし、クラス名を str にキャストすると__all__
、問題なく動作します。
[from mypackage import SomeClass
以下の run.py で指定した場合にも機能します... のアイテム__all__
は処理されないためです。]
mypackage/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']
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
もちろん、これについて pylint は不平を言っています。
私の他のオプションは、 init のすべての文字列をインポートせずunicode_literals
、明示的にユニコードにキャストすることu'uni string'
です.