仅使用打印语句进行调试
最近我在用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
,同时使用一些简单的日志记录方法,比如debug
、info
、warning
、error
和critical
。
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))