【问题标题】:design a print funtion for debug mode [duplicate]为调试模式设计打印功能[重复]
【发布时间】:2020-12-08 16:28:24
【问题描述】:

我正在尝试设计一个打印功能dprint 以供调试使用。具体来说,这就是我想要实现的目标:

def func1(a,b,debug=0):
    if debug:
        print(Something) # print something if debug mode

下面是我如何设计dprint

def func2(a,b,debug=0):
    def dprint(*args):  
        if debug:
            print(*args)  # using the local variable `debug` to detect whether is under debug mood
    dprint(Something) # print something if debug mode

func2 可以工作,但不是很好,因为我需要将dprint 函数插入到其他所有函数中。不知道有没有更体面的方法来实现这个dprint功能。

【问题讨论】:

  • 为什么不用python日志模块?
  • 我无法理解您的代码...为什么是func2、func1 和dprint?是的,你为什么不使用logging 的内置功能?即logger.debug

标签: python


【解决方案1】:

您可以使用全局变量debug 代替参数,并使dprint 成为自己的函数。

debug = True
def dpring(*args, **kwargs):
    if debug:
        print(*args, **kwargs)

def func2(a, b):
    dprint(Somthing)
# OR
def func2(a, b, debug_=0):
    global debug # not necesary but IMO it makes the code more readable
    debug = bool(debug_)
    dprint(Something)

【讨论】:

  • 如题,func1 和func2 的目的是什么? dprint 有什么问题?
【解决方案2】:

使用装饰器:

def dprint(func):
    def _f(*args, **kwargs):
        if kwargs.get('debug',0) == 1:
            print('Something')
        return func(*args, **kwargs)
    return _f
    
@dprint    
def f(a, b, debug=0):
    print(a, b)   

在这种情况下,您只需在您想要此功能的所有功能上添加@dprint。

【讨论】:

  • 我觉得他只想有一个功能,打印显示这个功能在调试模式下运行。
  • 哦,这个问题不是很清楚,所以可能就是这种情况。我会删除我的cmets,让OP判断
  • 是的,我认为这就是他计划使用它的方式......在他的帖子中,他说他将使用 debug kwarg 在所有函数中添加这个函数
  • 我在问题中没有看到任何提及调试kwarg...
  • 一个不错的补充是让调试消息成为装饰器的参数,这样每个函数都可以有不同的消息
猜你喜欢
  • 2011-03-27
  • 2012-07-05
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 2016-12-20
相关资源
最近更新 更多