[解決済み] Pythonモジュールがそのサブモジュールをインポートしないことがあるのはなぜですか?
質問
今日、奇妙なことに気づいたので、説明してほしい。私は、質問としてこれをフレーズする方法さえ100%確信していなかったので、googleは問題外です。loggingモジュールは、いくつかの奇妙な理由のために、モジュールlogging.handlersにアクセスすることができません。私を信じないなら、自分でそれを試してみてください。
>>> import logging
>>> logging.handlers
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'handlers'
>>> import logging.handlers
>>> logging.handlers
<module 'logging.handlers' from '/usr/lib/python2.6/logging/handlers.pyc'>
なぜこのようなことが起こるのか、どなたか説明していただけませんか?
どのように解決するのですか?
Pythonでは、モジュールはアクセスできるようになる前にインポートされる必要があります。
import logging
はloggingモジュールだけをインポートします。それは偶然にも
logging
はサブモジュールを持つパッケージですが、それらのサブモジュールはまだ自動的にロードされません。ですから、明示的にインポートする必要があります。
logging.handlers
を明示的にインポートする必要があります。
なぜ余分なインポートが必要ないように見えるのか不思議に思っている方: パッケージによっては、インポート時にサブモジュールの一部または全部をインポートします -- 単に、それらのインポートを
__init__.py
ファイル内でインポートを行うだけです。他のケースでは、インポートする他の何かが、そのパッケージの
logging.handlers
. どのコードがインポートを行うかは重要ではありません。
何か
がインポートされる限り、です。
logging.handlers
にアクセスする前に、それがそこにあることになります。また、パッケージのように見えるモジュールが実はそうでないこともあります。
os
と
os.path
.
os
はパッケージではなく、(あなたのプラットフォームにとって) 正しい他のモジュールをインポートして
path
としてアクセスできるようにするだけです。
os.path
.
関連
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] と'is'のどちらかを使って文字列を比較すると、異なる結果になることがあるのはなぜですか?
-
[解決済み] ローカルにインストールされたPythonモジュールの一覧を取得するにはどうしたらいいですか?
-
[解決済み] 他のPythonファイルをインポートするには?
-
[解決済み] Pythonモジュールのバージョンを確認する方法は?
-
[解決済み] 同じディレクトリやサブディレクトリ内のクラスをインポートする方法は?
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み] データフレームをソートした後にインデックスを更新する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AttributeError: 'module' オブジェクト (scipy) には 'misc' 属性がありません。
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] バブルソートの宿題
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] Django filter queryset __in for *every* item in list