仅使用打印语句进行调试

142 投票
6 回答
164820 浏览
提问于 2025-04-16 20:51

最近我在用Python编程,写了很多代码。我在处理一些以前没接触过的数据,使用了一些从没见过的公式,还要处理超大的文件。为了确认一切正常,我写了很多打印语句来检查程序的运行情况,找出可能出错的地方。不过,通常情况下,输出这么多信息并不是个好习惯。那么,我该怎么做才能在调试时使用打印语句,而在不需要时又让它们不被打印出来呢?

6 个回答

22

使用内置的 logging 库来记录信息,而不是直接打印出来。

你需要创建一个 Logger 对象(比如叫 logger),之后每次你想要输出调试信息的时候,只需要这样写:

logger.debug("Some string")

在程序开始时,你可以用 logger.setLevel 来设置输出的级别。如果你把它设置为 DEBUG,所有的调试信息都会显示出来。如果设置为 INFO 或更高的级别,调试信息就会消失。

这个工具还可以用来记录更严重的事情,分为不同的级别(INFO、WARNING 和 ERROR)。

45

一个简单的方法是调用一个记录日志的函数:

DEBUG = True

def log(s):
    if DEBUG:
        print s

log("hello world")

这样你就可以改变DEBUG的值,然后选择是否要记录日志来运行你的代码。

Python的标准logging模块提供了一个更复杂的机制来实现这个功能。

218

logging模块提供了你所需要的所有功能。一开始可能觉得它有点复杂,但其实只要用到你需要的部分就可以了。我建议使用logging.basicConfig来设置日志的级别为stderr,同时使用一些简单的日志记录方法,比如debuginfowarningerrorcritical

import logging, sys
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
logging.debug('A debug message!')
logging.info('We processed %d records', len(processed_records))

撰写回答