python - 如何使用冗长的 Python 打印函数的开始和结束?

标签 python python-2.7 debugging printing verbose

我已经写了一大段代码,我正在寻求改进我的冗长输出。我想到了 if verbose: print '**** function_name ****' 在函数的开头和结尾,甚至定义了一个函数以使其更容易调用(我'我使用由 kindall 编写的非常性感的冗长打印 here )

def verbwrap(function, side):
    if side=='start':
        verboseprint(' ******  %s  ******' %(function))
    if side=='end': 
        verboseprint(' ^^^^^^  %s  ^^^^^^' %(function))

打算像这样使用它:

import inspect

def test(lst):
    verbwrap(inspect.currentframe().f_code.co_name,'start')
    for i in lst:
        print i
    verbwrap('test', 'end') #equivalent to above, but easier to write :(

有没有办法让我只调用一次重新设计的verbwrap()?没有多少修补让我找到答案!

最佳答案

考虑到您只想在函数的开头和结尾打印一些内容,那么最好的方法是使用装饰器。

def verbwrap(function):
    def wrapper(*args, **kwargs):
        verboseprint(' ******  %s  ******' %(function.__name__))
        result = function(*args, **kwargs)
        verboseprint(' ^^^^^^  %s  ^^^^^^' %(function.__name__))
        return result
    return wrapper

现在将上面的装饰器与您要调试的任何函数一起使用:

@verbwrap
def test(lst):
    for i in lst:
        print i

演示:

verboseTrue 时:

 ******  test  ******
1
2
3
 ^^^^^^  test  ^^^^^^

verboseFalse 时:

1
2
3

您可以通过计算 wrapper 函数内的 verbose 的值来使其更加动态,使用这种方法您可以决定在函数运行时调试或不调试实际被调用。

def verbwrap(function):
    def wrapper(*args, **kwargs):
        # Calculate the value of `verbose` here.
        # Say you're reading it from a config etc
        verbose = False
        if verbose:
            print ' ******  %s  ******' %(function.__name__)
            result = function(*args, **kwargs)
            print ' ^^^^^^  %s  ^^^^^^' %(function.__name__)
            return result
        else:
            return function(*args, **kwargs)
    return wrapper

关于python - 如何使用冗长的 Python 打印函数的开始和结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38301979/

相关文章:

python : How to continue execution inside a try statement after an exception stop it

python - 如何在 AWS Lambda 上的无服务器应用程序中存储和使用 HTML 模板(使用 AWS SAM)?

python - SQLAlchemy:默认值的输出为 None

python - 如果其他 'better' 值存在于其他地方,则替换数据框列中的值

python - 使用 Enthought Canopy 从命令行参数运行 .py 代码

python - sql从大量ID中选择

java - 如何自动将pdf表单域导出到xml

debugging - ssl/tls 握手分析器

c++ - 退出后调试崩溃? (主要返回后)

Android 调试器错误 (MonoDroid)