Pythonデバッグ用の小さなログデコレータ

レベル1

レベル1

Elolige8ポイント2時間前

  1. strftimeを調べます

  2. あなたはクワーグをサポートする必要があります

  3. f-stringを使用します(3.6以上を使用している場合)

レベル2

mushy_wombat3点2時間前

ご回答有難うございます!病気あなたのポイントを見て:D

レベル1

mushy_wombat3点2時間前

ねえ、数週間前に、関数の簡単なロギングを可能にするためにデコレーターを使い始めました。私は本当にそれが好きで、あなたの何人かもそうかもしれないと思いました。

改善方法やその他のアノテーションについてご意見がございましたら、ぜひお聞かせください。

コピーと貼り付けのコード:

def log(func):

""" log decorator to enable simple logging for functions """

def inner(*args):

timestamp = str(datetime.datetime.now()).split(".")[0]

res = func(*args)

print("[%s] {%s} %s -> %s" %(timestamp, func.__name__, args, res))

return res

return inner

次で作成したスクリーンショット:https : //carbon.now.sh/

編集:書式設定

レベル2

Eambertide非表示のスコア37分前

デコレータは、関数内で費やした時間を計算するのにも最適です。

レベル1

アテルモップ3点1時間前

印刷ステートメントの代わりにロギングモジュールの使用を検討してください。次に、ロガーにオプションを設定する構成可能なデコレーターにすることができます。

レベル2

mushy_wombat非表示のスコア42分前

良いアイデア、ありがとう!

レベル1

EmielRommelse2点1時間前

おそらく、関数が例外をスローしたときにも時間と引数が出力されるように変更することを検討してください(その後、おそらくその例外をスローする必要があります)

レベル2

mushy_wombat3点1時間前

いい視点ね!追加します:)

レベル1

cantremembermypasswd非表示のスコア52分前

再利用可能なライブラリ(pip install reusables)に1つあります

def log_exception(log="reusables", message=None, exceptions=(Exception, ),

level=logging.ERROR, show_traceback=True):

"""

Wrapper. Log the traceback to any exceptions raised. Possible to raise

custom exception.

.. code :: python

@reusables.log_exception()

def test():

raise Exception("Bad")

# 2016-12-26 12:38:01,381 – reusables ERROR Exception in test – Bad

# Traceback (most recent call last):

# File "<input>", line 1, in <module>

# File "reusables\wrappers.py", line 200, in wrapper

# raise err

# Exception: Bad

Message format options: {func} {err} {args} {kwargs}

:param exceptions: types of exceptions to catch

:param log: log name to use

:param message: message to use in log

:param level: logging level

:param show_traceback: include full traceback or just error message

"""

def func_wrapper(func):

@wraps(func)

def wrapper(*args, **kwargs):

msg = message if message else "Exception in '{func}': {err}"

if not message:

msg = _add_args(msg, *args, **kwargs)

try:

return func(*args, **kwargs)

except exceptions as err:

my_logger = (logging.getLogger(log) if isinstance(log, str)

else log)

my_logger.log(level, msg.format(func=func.__name__,

err=str(err),

args=args, kwargs=kwargs),

exc_info=show_traceback)

raise err

return wrapper

return func_wrapper

レベル2

mushy_wombat非表示のスコア43分前

よかった、ありがとう!これについては知りませんでした

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Next Post

Houdini 実用的なVEX:第1巻-勾配上昇、降下、等高線-ハイトフィールド[無料レッスン4]

火 9月 8 , 2020