AttributeError: 'module' object has no attribute 'handlers'--Python submodule import problem
2022-02-21 19:05:45
Pythonのloggingモジュールを使ってログを記録し、RotatingFileHandlerを使ってログファイルが指定したサイズを超えると新しいログファイルが生成されるようにログを処理したいと思います。
基本的なコードは以下の通りです。
以下のようなエラーで実行します。
AttributeError: 'module' オブジェクトには 'handlers' という属性がありません。
logging モジュールをインポートした後、そのサブモジュールハンドラを自動的にインポートしていないことが判明しました。
Pythonプログラムのモジュールは、アクセスする前にインポートする必要があります。import loggingはloggingモジュールだけをインポートしますが、これは自動的にロードされないサブモジュールを持つパッケージです。ですから、logging.handlersサブモジュールにアクセスする前に明示的にインポートする必要があります。
しかし、時々、いくつかのパッケージは、自動的にそのサブモジュールをインポートするための追加のアクションなしでインポートされます。それらのアクションはパッケージの __init__.py ファイルで行われるからです。他のケースでは、あなたがインポートする他の何かが logging.handlers モジュールをインポートすることもあります。どのような場合であっても、ただ、事前にアクセスすることを確認してください。
対応するサブモジュールはすでにインポートされています。os はパッケージではなく、単に path と呼ばれる他のモジュールを提供し、あなたは os.path を通してそれにアクセスすることができます。
基本的なコードは以下の通りです。
import logging
logger = logging.getLogger('mylogger')
logger.setLevel(logging.INFO)
fh = logging.handlers.RotatingFileHandler('/tmp/test.log', mode = 'a', maxBytes=10240, backupCount=3, encoding='utf-8')
formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.info('hello logging')
logger.warning('hello logging')
logger.error('hello logging')
logger.critical('hello logging')
以下のようなエラーで実行します。
AttributeError: 'module' オブジェクトには 'handlers' という属性がありません。
logging モジュールをインポートした後、そのサブモジュールハンドラを自動的にインポートしていないことが判明しました。
import logging
import logging.handlers
......
再実行すると、プログラムが正常に出力されます。
Pythonプログラムのモジュールは、アクセスする前にインポートする必要があります。import loggingはloggingモジュールだけをインポートしますが、これは自動的にロードされないサブモジュールを持つパッケージです。ですから、logging.handlersサブモジュールにアクセスする前に明示的にインポートする必要があります。
しかし、時々、いくつかのパッケージは、自動的にそのサブモジュールをインポートするための追加のアクションなしでインポートされます。それらのアクションはパッケージの __init__.py ファイルで行われるからです。他のケースでは、あなたがインポートする他の何かが logging.handlers モジュールをインポートすることもあります。どのような場合であっても、ただ、事前にアクセスすることを確認してください。
対応するサブモジュールはすでにインポートされています。os はパッケージではなく、単に path と呼ばれる他のモジュールを提供し、あなたは os.path を通してそれにアクセスすることができます。
関連
-
[解決済み】npm - "Pythonの実行ファイル「python」が見つかりません。" env変数PYTHONを設定すればOKです。
-
RuntimeWarning: double_scalars に無効な値があることを解決する。
-
Pythonを用いたMUIエリアスクロール機能
-
[解決済み] Pandasをインポートするとエラーが発生する AttributeError: モジュール 'pandas' にはiPython Notebookの属性 'core' がない
-
[解決済み] Pythonで辞書にある文字列を両方表示する方法
-
[解決済み] plt.subplots() の Axes は "numpy.ndarray" オブジェクトで、"plot" という属性を持っていない。
-
[解決済み] Pythonで、intをstringに変換するときに、フォーマットを指定する方法は?
-
[解決済み] パスカルの三角形(Python版
-
[解決済み] Pythonでvirtualenvの名前を変更する方法は?
-
print を使用したエラー SyntaxError: print' の呼び出しに括弧がありません print("") のことですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonスクリプトを内部から再起動する
-
[解決済み】Anaconda Runtime Error: Pythonはフレームワークとしてインストールされていない?
-
不足している必須依存関係 'numpy' を解決する
-
Pythonプログラミング webpyフレームワーク 学習とdefのテンプレート
-
[解決済み】Bokehでヒートマップを正しく作成する方法
-
[解決済み] Python 3 では、'map' 型のオブジェクトは len() を持ちません。
-
[解決済み] ipython のすべての警告を隠す
-
[解決済み] エラー#15: libiomp5.dylib を初期化していますが、libiomp5.dylib が既に初期化されていることが判明しました。
-
TypeError: 'numpy.ndarray' オブジェクトは呼び出し可能ではありません。
-
Pythonによる2次元辞書