求助 一个装饰器的问题

2020-07-25 10:40:37 +08:00
 baishuigansijun

def loggingDecorator(func):

"""记录日志的装饰器"""

def wrapperLogging(*args, **kwargs):

    logging.info("开始执行 %s() ..." % func.__name__)
    
    func(*args, **kwargs)
    
    logging.info("%s() 执行完成!" % func.__name__)
    
return wrapperLogging

def showInfo(*args, **kwargs):

print("这是一个测试函数,参数:", args, kwargs)

decoratedShowInfo = loggingDecorator(showInfo)

decoratedShowInfo('arg1', 'arg2', kwarg1=1, kwarg2=2)

我期待的结果是:

INFO:root:开始执行 showInfo() ...

这是一个测试函数,参数: ('arg1', 'arg2') {'kwarg1': 1, 'kwarg2': 2}

INFO:root:showInfo() 执行完成!

但实际结果是:

这是一个测试函数,参数: ('arg1', 'arg2') {'kwarg1': 1, 'kwarg2': 2}

INFO:root:开始执行 showInfo() ...

INFO:root:showInfo() 执行完成!

或者:

INFO:root:开始执行 showInfo() ...

INFO:root:showInfo() 执行完成!

这是一个测试函数,参数: ('arg1', 'arg2') {'kwarg1': 1, 'kwarg2': 2}

请问各位这是为何啊

869 次点击
所在节点    Python
2 条回复
luoleng
2020-07-25 11:13:23 +08:00
应该不是程序的问题; logging 跟 print 混用造成的乱序;参考 https://www.zhihu.com/question/276797034/answer/391024938
baishuigansijun
2020-07-25 11:53:06 +08:00
@luoleng 原来是这样,谢谢了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/692971

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX