logging.debug()打印的内容与常规print()不同

时间:2018-11-21 07:43:40

标签: python python-3.x

我写了一段代码来查找阶乘,我使用了日志记录模块。 在搜索该网站之后,我没有发现相关问题。 这是我的代码

def factorial(n):
    logging.basicConfig(level=logging.DEBUG,format='%(asctime)s-%(levelname)s-%(message)s')
    logging.debug('Start of program')
    logging.debug('start of action (%s)'%(n))
    total=1
    for i in range(1,n+1):
        #print(i)
        total *=i
        print(total)
        logging.debug('i is '+str(i)+' total='+str(total))
    logging.debug('End of factorial(%s) '%(n))
    return total
def main():
    print(factorial(5))
    logging.debug('End of program')
if __name__=='__main__':
    import logging
    main()

总计的输出不是

中的“应该是什么”
logging.debug('i is '+str(i)+' total='+str(total))

这是我运行代码后得到的

2018-11-21 09:34:56,213-DEBUG-Start of program
2018-11-21 09:34:56,213-DEBUG-start of action (5)
1
2018-11-21 09:34:56,213-DEBUG-i is 1 total=12

2018-11-21 09:34:56,213-DEBUG-i is 2 total=2
6
2018-11-21 09:34:56,213-DEBUG-i is 3 total=6
24
2018-11-21 09:34:56,213-DEBUG-i is 4 total=24
120
2018-11-21 09:34:56,213-DEBUG-i is 5 total=120
2018-11-21 09:34:56,213-DEBUG-End of factorial(5) 
120
2018-11-21 09:34:56,213-DEBUG-End of program

这个问题似乎很长,但是它应该是非常简单的操作。

1 个答案:

答案 0 :(得分:0)

这是一个猜测,但看起来您的印刷品中存在种族状况。我实际上以为日志记录需要这种情况,但要检查您可以尝试以下操作: 删除打印语句并运行程序。如果程序正确,请删除调试并返回打印以再次检查。

可能的(显然)竞争条件是,尽管logging.debug尚未完成打印整行,但您的代码现在执行了print语句。那就是为什么你有空行。