在Python中启用和禁用调试消息

时间:2013-11-03 11:11:18

标签: python debugging nonetype

我目前正在学习Python,并且知道幕后发生了什么,我写了很多打印输出。 看到回去评论我开始编写模块的所有消息都是一件大惊小怪的事情,我在方法中设置所有消息我想要使用它们然后使用布尔来关闭和打开消息。 问题是,我得到无打印输出而不是我的调试消息,这不是很优雅。有办法解决这个问题吗?

一些示例代码:

def setDebug(bool):
    '''
    Toggles the debug messages
    '''

    global _debug
    _debug = bool


def setNewMsg(msg):
    '''
    Appends a new debug message to the list
    '''
    global _debugMsg
    _debugMsg.append(msg)

def getDebugMsg(index):
    '''
    Takes an int for a parameter and returns the debug message needed
    '''
    global _debug
    global _debugMsg

    if _debug == True:
        return _debugMsg[index] 
    else: 
        return

2 个答案:

答案 0 :(得分:8)

既然你说你是Python的新手,我认为你应该考虑使用logging模块

看看这个linkHOWTO也可以提供帮助。

来自Python文档:

This module defines functions and classes which implement a flexible event logging system for applications and libraries.

您可以设置日志记录模块将所有打印件保存到文件,通过控制日志记录级别,您可以控制消息的级别。

示例:

import logging
logging.basicConfig(filename='mylog.log',level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')

如果level=logging.DEBUG您将能够看到所有消息,但通过更改为level=logging.INFO,它将只保存文件信息及以上信息。尝试他们非常有用的链接。

答案 1 :(得分:1)

如果您的None变量为false,那么您将返回_debug

如果_debug为false,则可以返回空字符串:

return ''

或者您可能想要返回一条消息:

return 'Debug mode is not set to True'

返回没有与返回None基本相同。即使您没有返回任何内容,Python也会将返回值设置为None

>>> def test():
    pass

>>> a = test()
>>> print a
None

此外,如果您想使用您的方法而不是logging模块,您可能需要检查_debugMsg[index]是否存在。

if _debug:
    try:
       return _debugMsg[index]
    except IndexError:
       return 'The debug message hasn't listed yet.'

希望这有帮助!