初识Python之调试程序之巧用日志

自己弄了一个python学习群,感兴趣的可以加在这里插入图片描述

一般来说,一个程序运行过程中,我们无法在外界知道程序运行到哪一部分。甚至来说除了错误我们去定位错误都很难,所以我们引进了日志

所谓日志就是在程序运行时输出某些变量的值,你可以使用记日志的方式来调试代码

你可能会大量的使用print(),但是这是不对的

Python 的 logging 模块使得你很容易创建自定义的消息记录。
这些日志消息将描述程序执行何时到达日志函数调用,并列出你指定的任何变量当时的值。
另一方面,缺失日志信息表明有一部分代码被跳过,从未执行

假如你编写了一个函数,计算一个数的阶乘。在数学上,4 的阶乘是1 × 2 × 3 × 4,即 24。7 的阶乘是 1 × 2 × 3 × 4 × 5 × 6 × 7,即 5040

import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')

logging.debug('Start of program')
def factorial(n):
    logging.debug('Start of factorial(%s%%)' % (n))
    total = 1
    for i in range(n + 1):
        total *= i
        logging.debug('i is ' + str(i) + ', total is ' + str(total))
    logging.debug('End of factorial(%s%%)' % (n))
    return total

print(factorial(5))
logging.debug('End of program')

这里,我们在想打印日志信息时,使用 logging.debug() 函数。这个 debug() 函数
将调用 basicConfig(),打印一行信息。这行信息的格式是我们在 basicConfig()函数
中指定的,并且包括我们传递给 debug() 的消息

程序会如何输出呢?

最终是0

我们看日志文件:

- DEBUG - Start of factorial(5)
- DEBUG - i is 0, total is 0
- DEBUG - i is 1, total is 0
- DEBUG - i is 2, total is 0
- DEBUG - i is 3, total is 0
- DEBUG - i is 4, total is 0
- DEBUG - i is 5, total is 0
- DEBUG - End of factorial(5)
0 
- DEBUG - End of program

这样我们会很清楚的看到错误在哪里, i的起始值是0,导致所有的数据全部是0

我们对程序进行更改

import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')

logging.debug('Start of program')
def factorial(n):
    logging.debug('Start of factorial(%s%%)' % (n))
    total = 1
    for i in range(1, n + 1):
        total *= i
        logging.debug('i is ' + str(i) + ', total is ' + str(total))
    logging.debug('End of factorial(%s%%)' % (n))
    return total

print(factorial(5))
logging.debug('End of program')

输出

- DEBUG - Start of factorial(5)
- DEBUG - i is 1, total is 1
- DEBUG - i is 2, total is 2
- DEBUG - i is 3, total is 6
- DEBUG - i is 4, total is 24
- DEBUG - i is 5, total is 120
- DEBUG - End of factorial(5)
120 
- DEBUG - End of program
日志级别

“日志级别”提供了一种方式,按重要性对日志消息进行分类。

5 个日志级别如下所示,从最不重要到最重要。利用不同的日志函数,消息可以按某个级别记入日志。

级别日志函数描述
DEBUGlogging.debug()最低级别。通常只有在调试程序时,你才会关心这些消息
INFOlogging.info()用于记录程序中一般事件的信息,或确认一切工作正常
WARNINGlogging.warning()用于表示可能的问题
ERRORlogging.error()用于记录错误,它导致程序做某事失败
CRITICALlogging.critical()最高级别。用于表示致命的错误

日志消息作为一个字符串,传递给这些函数。日志级别是一种建议。归根到底,还是由你来决定日志消息属于哪一种类型。

将日志记录到文件
import logging
logging.basicConfig(filename='myProgramLog.txt', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

关注公众号:Python互助小组
一起学习,共同进步
里面有不定期的赠书活动哦
公众号:Python互助小组 或者搜索python_group

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值