Python実践入門という書籍のP223にこのようなコードがあるのですが、debug_context関数の中でtry文が使われている必要性がわかりません。
python
1import logging 2from contextlib import contextmanager 3 4logger = logging.getLogger(__name__) 5logger.addHandler(logging.StreamHandler()) 6 7# デフォルトをINFOレベルとし、DEBUGレベルのログは無視する 8logger.setLevel(logging.INFO) 9 10@contextmanager 11def debug_context(): 12 level = logger.level 13 try: 14 # ログレベルを変更する 15 logger.setLevel(logging.DEBUG) 16 yield 17 finally: 18 # もとのログレベルに戻す 19 logger.setLevel(level) 20 21def main(): 22 logger.info('before: info log') 23 logger.debug('before: debug log') 24 25 # DEBUGログを見たい処理をwithブロック内で実行する 26 with debug_context(): 27 logger.info('inside the block: info log') 28 logger.debug('inside the block: debug log') 29 30 logger.info('after: info log') 31 logger.debug('after: debug log') 32 33if __name__ == '__main__': 34 main()
try文の中のコードで例外が起こるところが想像できないので以下のようなコードで十分なのではと思ったのですが、
python
1 2@contextmanager 3def debug_context(): 4 level = logger.level 5 logger.setLevel(logging.DEBUG) 6 yield 7 logger.setLevel(level)
何か理由があったりするのでしょうか。実際にtry文を除いても期待通りに動作します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。