【Python】代码调试(pdb与logging使用)

一、pdb使用

pdb 是 python 自带的一个包,为 python
程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。

在程序中间插入一段程序(import pdb    
pdb.set_trace() ),相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的

1、加入断点


#!/usr/bin/python
import pdb

_DEBUG = True
def debug_demo(val):
if _DEBUG == True:
pdb.set_trace()
if val <= 1600 :
print "level 1"
print 0
elif val <= 3500 :
print "level 2"
print (val - 1600) * 0.05
elif val <= 6500 :
print "level 3"
print (val - 3500) * 0.10 + (3500 - 1600) * 0.05
else:
print "level 4"
print (val - 6500) * 0.20 + (6500 - 3500) * 0.10 + (3500 - 1600) * 0.05

# ~def debug_demo

if __name__ == "__main__":
debug_demo(4500)

2、开始调试

二、logging使用


# encoding:utf-8
import logging

log1 = logging.getLogger(‘a.b.c‘)
log2 = logging.getLogger(‘a.d.e‘)

filehandler = logging.FileHandler(‘test.log‘, ‘a‘)
formatter = logging.Formatter(‘%(name)s %(asctime)s %(levelname)s %(message)s‘)
filehandler.setFormatter(formatter)
filter = logging.Filter(‘a‘)
filehandler.addFilter(filter)

log1.addHandler(filehandler)
log2.addHandler(filehandler)

log1.setLevel(logging.DEBUG)
log2.setLevel(logging.DEBUG)

log1.debug(‘it is a debug info for log1‘)
log1.info(‘normal infor for log1‘)
log1.warning(‘warning info for log1:b.c‘)
log1.error(‘error info for log1:abcd‘)
log1.critical(‘critical info for log1:not worked‘)

log2.debug(‘debug info for log2‘)
log2.info(‘normal info for log2‘)
log2.warning(‘warning info for log2‘)
log2.error(‘error:b.c‘)
log2.critical(‘critical‘)

logging lib 包含 4 个主要对象

  • logger:logger
    是程序信息输出的接口。它分散在不同的代码中使得程序可以在运行的时候记录相应的信息,并根据设置的日志级别或 filter
    来决定哪些信息需要输出并将这些信息分发到其关联的 handler。常用的方法有 Logger.setLevel(),Logger.addHandler()
    ,Logger.removeHandler() ,Logger.addFilter() ,Logger.debug(), Logger.info(),
    Logger.warning(), Logger.error(),getLogger() 等。logger 支持层次继承关系,子 logger
    的名称通常是父 logger.name 的方式。如果不创建 logger 的实例,则使用默认的 root logger,通过
    logging.getLogger() 或者 logging.getLogger("") 得到 root logger 实例。

  • Handler:Handler 用来处理信息的输出,可以将信息输出到控制台,文件或者网络。可以通过 Logger.addHandler() 来给
    logger 对象添加 handler,常用的 handler 有 StreamHandler 和 FileHandler 类。StreamHandler
    发送错误信息到流,而 FileHandler 类用于向文件输出日志信息,这两个 handler 定义在 logging 的核心模块中。其他的 hander
    定义在 logging.handles 模块中,如 HTTPHandler,SocketHandler。

  • Formatter:Formatter 则决定了
    log 信息的格式 , 格式使用类似于 %(< dictionary key >)s 的形式来定义,如‘%(asctime)s -
    %(levelname)s - %(message)s‘,支持的 key 可以在 python 自带的文档 LogRecord attributes
    中查看。

  • Filter:Filter
    用来决定哪些信息需要输出。可以被 handler 和 logger 使用,支持层次关系,比如如果设置了 filter 为名称为 A.B 的
    logger,则该 logger 和其子 logger 的信息会被输出,如 A.B,A.B.C.

【Python】代码调试(pdb与logging使用)

时间: 2024-12-17 16:41:27

【Python】代码调试(pdb与logging使用)的相关文章

关于Python代码调试的问题

关于Python代码调试的问题使用 pdb 进行调试pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等.pdb 提供了一些常用的调试命令,下面结合具体的实例讲述如何使用 pdb 进行调试.import pdb   a = "aaa" pdb.set_trace()   b = "bbb" c = "ccc" fin

python代码调试

http://blog.csdn.net/pipisorry/article/details/45190851 trace模块可以监控Python执行程序的方式,同时生成一个报表来显示程序的每一行执行的次数.这些信息可以用来发现未被自动化测试集所覆盖的程序执行路径,也可以用来研究程序调用图,进而发现模块之间的依赖关系.编写并执行测试可以发现绝大多数程序中的问题,Python使得debug工作变得更加简单,这是因为在大部分情况下,Python都能够将未被处理的错误打印到控制台中,我们称这些错误信息

Python 代码使用pdb调试技巧

Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug.python 提供了一系列 debug 的工具和包,可供我们选择.本文将主要阐述如何利用 python debug 相关工具进行 debug. 使用 pdb 进行调试 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等.pdb 提供了一些常用的调试命令,详情见表

【转】Python 代码调试技巧

转载自:http://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug.python 提供了一系列 debug 的工具和包,可供我们选择.本文将主要阐述如何利用 python debug 相关工具进行 debug. 使用 pdb 进行调试 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能

Python - 调试Python代码的方法

调试(debug) 将可疑环节的变量逐步打印出来,从而检查哪里是否有错. 让程序一部分一部分地运行起来.从核心功能开始,写一点,运行一点,再修改一点. 利用工具,例如一些IDE中的调试功能,提高调试效率. Python CMD python -m trace -t <py file> python -m dis <py file> 内置trace模块:打印所有执行的语句 内置dis模块:分析字节码 Linux strace -p pid # 用系统命令跟踪系统调用 PyCharm

在Linux下调试Python代码的各种方法

这是一个我用于调试或分析工具概述,不一定是完整全面,如果你知道更好的工具,请在评论处标记. 日志 是的,的确,不得不强调足够的日志记录对应用程序是多么的重要.您应该记录重要的东西,如果你的记录足够好的话,你可以从日志中找出问题从而节省大量的时间. 如果你曾经用print语句来调试代码现在停下吧,用logging.debug替代,开始可以慢慢来,以后完全禁用它... 追踪有时看到程序如何被执行会很有帮助.你可以使用IDE的调试共轭ngn一步一步的运行程序,但你需要知道你要找的是什么,否则这将会是一

Python学习记录-代码调试

方法1 print() 不推荐使用 方法2 断言 凡是用print()来辅助查看的地方,都可以用断言(assert)来替代: def foo(s): n = int(s) assert n != 0, 'n is zero!' return 10 / n def main(): foo('0') assert的意思是,表达式n != 0应该是True,否则,根据程序运行的逻辑,后面的代码肯定会出错. 如果断言失败,assert语句本身就会抛出AssertionError: $ python er

如何远程调试Python代码

这是一篇小记. 平时使用python写的代码对外部依赖性都不复杂,这些代码在本地调试,运行没问题之后,就可以放到生产去跑了.然而,最近的一个项目,由于使用了一些内部服务,需要连接到内部的环境进行调试.如果每次都修改代码之后,发布一次到内部环境运行测试,这样子操作流程略显繁琐了.于是乎,我就查阅了一些资料,发现我平时使用的Pycharm可以提供代码远程调试的功能,正好也可以解决我的问题. 首先来说一说代码远程调试.顾名思义,代码远程调试就是让我们可以在本地对远端的代码进行运行和输出日志检查,从而根

用VScode代码调试Python

Python扩展支持许多类型的Python应用程序的调试,包括以下一般功能: 观看窗口 评估表达式 当地人 参数 扩大孩子 断点 条件断点 暂停(进入)正在运行的程序 自定义启动目录 要熟悉这些常规功能,请查看VS Code调试文章.本文仅讨论那些特定于Python的注意事项. 选择一个配置 要选择调试配置,请选择边栏中的调试视图,然后从下拉列表中选择一个选项: 在调试时,状态栏显示左下角的当前配置,当前的调试解释器位于右侧.选择配置会显示列表,您可以从中选择不同的配置: 默认情况下,调试器使用