使用装饰器进行 Python 日志记录

2024-02-23

这是我们面对装饰器时遇到的第一个例子。但我无法意识到我到底想要什么。

一个名为 LOG 的简单装饰器。它应该像这样工作:

@LOG
def f(a, b=2, *c, **d):
    pass

结果应该是这样的:

f(1, pippo=4, paperino='luca')
===== Enter f =====
a = 1
b = 2
pippo = 4
paperino = luca
===== Exit f =====

作为参数传递给函数的每个参数都显示其值。

我发现这个问题比我想象的要难,主要是因为可以通过多种不同的方式将参数传递给函数(想想带有 *c 的元组或带有 **d 的字典)。

我尝试了一个解决方案,但我不确定它是否正确。有点像这样:

def LOG(fn):
    import inspect
    varList, _, _, default = inspect.getargspec(fn)
    d = {}
    if default is not None:
        d = dict((varList[-len(default):][i], v) for i, v in enumerate(default))
    def f(*argt, **argd):
        print ('Enter %s' % fn).center(100, '=')
        d.update(dict((varList[i], v) for i, v in enumerate(argt)))
        d.update(argd)
        for c in d.iteritems():
            print '%s = %s' % c
        ret = fn(*argt, **argd)
        print 'return: %s' % ret
        print ('Exit %s' % fn).center(100, '=')
        return ret
    return f

我觉得这并不像我想象的那么容易,但奇怪的是我在谷歌上没有找到我想要的东西。

你能告诉我我的解决方案是否可以吗?或者你能为我提出的问题提出更好的解决方案吗?

谢谢大家。


我唯一注意到的是dict((varList[i], v) for i, v in enumerate(argt))您使用两次的构造实际上是dict(zip(varList,argt)).

除此之外,我只有元批评:以上内容都不属于日志文件。

而不是通过日志来

  • 使用断言和调试器查看是否使用正确的参数调用函数。
  • 查看函数是否返回您编写的单元测试的正确结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用装饰器进行 Python 日志记录 的相关文章

  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size
  • 谷歌应用程序引擎中的图像 exif 数据

    在谷歌应用程序引擎开发环境中我无法获取 exif 数据 我从这里跟随指南https developers google com appengine docs python images imageclass https developers
  • 估计 SymPy 函数的进度

    我已经发出了sympy命令来求解某个方程或另一个方程 现在已经过去几天了 我不知道什么时候能完成 我可以得到吗sympy记录呼叫的进度 例如 solvers solve 如果没有 我如何估计最坏情况下的时间sympy需要解一些方程组 e g
  • Python 时间序列聚合

    我有一个像这样的数据框 df project ID country prj start prj end revenue profit 2131 USA 201603 201703 100000 30000 5124 UK 201502 20
  • Fig.add_subplot() *transform* 不起作用?

    关于帖子在 matplotlib 的子图中嵌入小图 https stackoverflow com questions 17458580 embedding small plots inside subplots in matplotlib
  • 在 matplotlib 中向颜色条添加标记或线条

    我有以下几行代码来生成热图 pcolormesh import matplotlib pyplot as plt import numpy as np vals np linspace np pi 2 np pi 2 101 x y np
  • 为什么静态绑定对于类和函数的工作方式不同?

    在 python 中 在 2 7 6 上测试 所有变量都是 在编译时静态绑定到范围 这个过程很好 描述于http www python org dev peps pep 0227 http www python org dev peps p
  • TypeError:使用一组 UDT 创建 Cassandra Python 驱动程序模型时不可散列的类型 UserType

    此问题与 Datastax Cassandra python 驱动程序的对象映射器有关 当尝试创建一个包含 UDT 集 作为字段的模型时 我收到错误 类型错误 不可散列的类型 UdtClassName 但是 我可以创建具有一组基本类型 例如
  • pyinstaller错误:OSError:[WinError 6]句柄无效

    该文件使用终端命令获取 wifi 密码netsh wlan show profiles我之前使用 pyinstaller 创建了一些 exe 它们工作得很好 代码 import subprocess import time import s

随机推荐

  • 扭曲的Python getPage

    我试图获得这方面的支持 但我完全感到困惑 这是我的代码 from twisted internet import reactor from twisted web client import getPage from twisted web
  • 编辑控件未使用所选画笔完全重新绘制

    我有一个编辑控件 其背景颜色取决于用户输入的有效性 如果输入有效 编辑控件应保持默认外观 否则背景颜色应更改为浅灰色 我正在检查有效性EN UPDATE处理程序 如果它无效 我存储HWND的编辑控件到vector 视觉样式已启用 当我改变鼠
  • 如何修复错误代码 C4146“一元减运算符应用于无符号类型。结果仍然无符号”?

    数据类型int的最小值为 2 147 483 648 所以 我输入了 int val 2147483648 但是 它有一个错误 unary minus operator applied to unsigned type result sti
  • 如何将 ArrayUtils 用于对象数组,它不会删除数组的内容

    如何删除对象数组的内容 如果还有其他方法可以删除对象数组的内容 请分享 import java util Arrays import java util Scanner import org apache commons lang3 Arr
  • IE中Jquery多级列表问题

    首先对我的英语感到抱歉 好吧 我尝试创建一个可排序的问题 答案列表 它在 FF 中完美运行 但在 IE 中不起作用 在 IE 中 当我尝试对答案 第二级 li 进行排序时 其问题和同一组答案以一种奇怪的方式与所选问题一起移动 Example
  • 基于多列值的 Python pandas groupby 值

    我在 Pandas 数据集中有一个连续的活动数据 sample data code user id 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 4705 4705 4705 4705 4705 223 223
  • 具有 DynamoDB 和 MySQL 双数据源的 Spring Data/JPA 存储库

    我熟悉如何让 Spring 通过多个持久单元和多个entityManagerFactoryBean 实现动态处理多个数据源 但我正在努力解决的是如何拥有 MySQL 方言and通过 spring config xml 文件在同一 sprin
  • 来自调试器的 Ios Xcode 消息:由于内存问题而终止

    我有一个带有集合视图的应用程序 以及此集合视图中的一个单元格 该单元格重定向到外部链接 每当该链接打开时 应用程序就会在后台崩溃并在调试器上显示 由于内存问题而终止 如果我只按主页按钮 应用程序就会继续正常工作 if UIDeviceOri
  • 单例类可以是静态的吗?

    单例类可以是静态的吗 不 单例类应该被实例化 因为该术语本身指的是一个实例 如果将其设为静态类 则无法从中创建单例对象
  • 如何使用Python查找文本文件中的所有isbn?

    我有一个文本文件text isbn里面有大量的 ISBN 我想编写一个脚本来解析它并将其写入一个新的文本文件 每个 ISBN 编号都在新行中 到目前为止 我可以编写用于查找 ISBN 的正则表达式 但无法进一步处理 import re li
  • AngularJS mailto 不发送电子邮件

    我使用以下代码允许我的 AngularJS 应用程序用户使用他们最喜欢的邮件客户端发送电子邮件 但是当我单击 发送 按钮时没有任何反应 有人可以检查我的代码并告诉我我在这里到底缺少什么吗 谢谢
  • 如何在不构建“音频可视化工具”的情况下将 JavaScript 动画与歌曲的节奏同步?

    从我的基本理解来看 JavaScript 音频可视化器是根据实际声波反映音乐的 我想构建像节拍器 http bl ocks org 1399233 这样的东西 我每隔一段时间就为一些 DOM 元素设置动画x beats 我现在这样做的方式是
  • Jasmine 对象“没有方法 'andReturn'”

    茉莉花初学者 茉莉花间谍的第一次尝试 我以为我在模仿格式显示在这里 http pivotal github io jasmine 搜索 andReturn 但我收到一个无法解决的错误 TypeError Object function ca
  • Visual Studio 构建事件立即返回

    我有一个运行时间较长的构建后事件 长到足以令人厌烦地等待 但又短到足以在每次发布编译后完成 我想立即返回到 VS 我尝试过运行批处理文件start但视觉工作室仍在等待cmd返回成功之前关闭窗口 有没有办法在生成此构建后事件时立即返回成功 T
  • 我可以使用 JavaScript 停止元刷新吗?

    以下代码允许用户停止元刷新的发生 并且它成功删除了meta refresh从页面 但浏览器仍然刷新页面 知道如何让它发挥作用吗
  • 无法在 python 3.7 中安装 Matplotlib

    在 Windows 10 64 位机器中安装 matplotlib 时出现错误显示 python setup py egg info failed with error code 1 in C Users Animus AppData Lo
  • Systemd 启用的服务不再在启动时启动

    我很久以前制作了一些自定义的 systemd 服务 它们都具有相同的配置 当然 ExecStart 除外 这个配置工作了很多年 我从 18 04 LTS 版本开始就已经启动并运行了 ubuntu 但现在看起来其中一些 systemd 服务根
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告
  • 重绘canvas html5而不闪烁

    我的屏幕每 25 毫秒重绘一次 并且图像闪烁 这是我的代码 var FRAME RATE 40 var intervalTime 1000 FRAME RATE gameLoop function gameLoop context clea
  • 使用装饰器进行 Python 日志记录

    这是我们面对装饰器时遇到的第一个例子 但我无法意识到我到底想要什么 一个名为 LOG 的简单装饰器 它应该像这样工作 LOG def f a b 2 c d pass 结果应该是这样的 f 1 pippo 4 paperino luca E