iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python代码调试技巧
  • 415
分享到

Python代码调试技巧

代码技巧Python 2023-01-31 01:01:24 415人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

原文地址:Http://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/一、使用pdb进行调试pdb是Python自带的包,为Python提供一种交互的源代码调试功能。常用命令

原文地址:Http://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/


一、使用pdb进行调试

pdb是Python自带的包,为Python提供一种交互的源代码调试功能。常用命令如下

命令
解释
break或b
设置断点
continue或c
继续执行程序
list或l
查看当前代码段
step或s
进入函数
return或r
执行函数直到从当前函数返回
exit或q
终止并退出(略暴力)
next或n
执行下一行
pp或p
打印变量的值
help
帮助

pdb调试使用于单步跟踪等小型调试。它不支持多线程和远程调试,同时没有较为直观的界面显示,不适合大型的python项目。可以python IDE中自带的调试功能。


二、原文中讲述了PyCharm以及Eclipse with pydev的调试功能,这两种IDE我都没有用过,我就介绍一下我用的IDE——Eric的调试功能。。。


下面结合实例讲述如何用Eric进行多线程调试:

#!/usr/bin/python 
import thread 
import time 
# Define a function for the thread 
def print_time( threadName, delay): 
    count = 0 
    while count <  5: 
        count += 1 
        print "%s: %s" % ( threadName, time.ctime(time.time()) ) 
def check_sum(threadName,valueA,valueB): 
    print "to calculate the sum of two number her"
    result=sum(valueA,valueB) 
    print "the result is" ,result; 
def sum(valueA,valueB): 
    if valueA >0 and valueB>0: 
        return valueA+valueB 
def readFile(threadName, filename): 
    file = open(filename) 
    for line in file.xreadlines(): 
        print line , 
        
try: 
    thread.start_new_thread( print_time, ("Thread-1", 2, ) ) 
    thread.start_new_thread( check_sum, ("Thread-2", 4,5, ) ) 
    thread.start_new_thread( readFile, ("Thread-3","test.txt",)) 
except: 
    print "Error: unable to start thread"
while 1: 
#      print "end"
    pass

在调试前通常需要设置断点,断点可以设置在循环或条件判断表达式处或程序关键点。设置断点的方法非常简单:在代码编辑框中将光标移动到需要设置断点的行,然后直接按 Ctrl+F8 或者选择菜单"Debug"->"Toggle Breakpoint",更为直接的方法是单击代码编辑处左侧边缘,可以看到出现红色的小圆点。

表达式求值:在调试过程中有的时候需要追踪一些表达式的值来发现程序中的问题,Pycharm 支持表达式求值,可以通过选中该表达式,然后选择“Debug”->”Evaluate”,或“Debug" -> "Excute"。输入要求值的表达式即可。在"Debug-viewer"(可在“windows"->"Debug-viewer"打开)中可以查看全局变量和局部变量。

多线程:Setting -> Preference -> Debugger -> Python -> Multi Threaded,开启后在Debug-viewer下有一个Threads窗口,显示多线程,切换到相应的进程,变量栏就会显示与之相关的变量,进行调试即可。


三、使用日志功能进行调试

Python中自带的logging模块提供日志功能,将logger的level分为五个等级,可以通过Logger.setLevel(lvl)来设置。

Level
使用情形
DEBUG
详细的情形,在追踪问题时使用
INFO

正常的信息

WARNING
一些不可预见的问题发生,或者将要发生,如磁盘空间低等,但不影响程序的运行
ERROR
由于某些严重的问题,程序中的一些功能受到影响
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.

import logging 
LOG1=logging.getLogger('b.c') 
LOG2=logging.getLogger('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('b') 
filehandler.addFilter(filter) 
LOG1.addHandler(filehandler) 
LOG2.addHandler(filehandler) 
LOG1.setLevel(logging.INFO) 
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')

上例设置了 filter b,则 b.c 为 b 的子 logger,因此满足过滤条件该 logger 相关的日志信息会 被输出,而其他不满足条件的 logger(这里是 d.e)会被过滤掉。

logging 的使用非常简单,同时它是线程安全的,下面结合多线程的例子讲述如何使用 logging 进行 debug。

logging.conf 
 [loggers] 
 keys=root,simpleExample 

 [handlers] 
 keys=consoleHandler 

 [formatters] 
 keys=simpleFormatter 

 [logger_root] 
 level=DEBUG 
 handlers=consoleHandler 

 [logger_simpleExample] 
 level=DEBUG 
 handlers=consoleHandler 
 qualname=simpleExample 
 propagate=0 

 [handler_consoleHandler] 
 class=StreamHandler 
 level=DEBUG 
 formatter=simpleFormatter 
 args=(sys.stdout,) 

 [formatter_simpleFormatter] 
 format=%(asctime)s - %(name)s - %(levelname)s - %(message)s 
 datefmt= 

 code example: 
 #!/usr/bin/python 
 import thread 
 import time 
 import logging 
 import logging.config 
 logging.config.fileConfig('logging.conf') 
 # create logger 
 logger = logging.getLogger('simpleExample') 
 # Define a function for the thread 
 def print_time( threadName, delay): 
	 logger.debug('thread 1 call print_time function body') 
	 count = 0 
	 logger.debug('count:%s',count)


更多关于Python debugger的资料请参考原文的参考资料。。。

--结束END--

本文标题: Python代码调试技巧

本文链接: https://www.lsjlt.com/news/183484.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python代码调试技巧
    原文地址:http://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/一、使用pdb进行调试pdb是Python自带的包,为Python提供一种交互的源代码调试功能。常用命令...
    99+
    2023-01-31
    代码 技巧 Python
  • Python代码调试技巧教程详解
    关于代码调试的技巧,我之前写过很多的文章,关注比较早的同学,也应该都有看过。 还没看过的同学,欢迎前往查阅:更多Python代码调试技巧 其中有一篇是关于 pdb 的调试技巧的: 里...
    99+
    2022-11-12
  • spring framework源码调试技巧
    目录1. 获取spring-framework源码2. 导入到IDEA2.1 预编译spring-oxm2.2 导入到Idea3 添加用于测试的SpringMVC项目Module3....
    99+
    2022-11-12
  • python调试代码
    我在看一些开源的python项目时,需要知道各个类各个函数之间的调用关系才能看懂代码,因此我写了个方法来跟踪代码的调用过程   import sys  from time import ctime  is_log=True  def log...
    99+
    2023-01-31
    代码 python
  • python调试技巧有哪些
    这篇文章将为大家详细讲解有关python调试技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。调试技巧1. 脚本调试Python的脚本调试可以是使用pdb模块。它可以让我们在脚本中随意设置设置断点:...
    99+
    2023-06-27
  • #7 Python代码调试
    前言 Python已经学了这么久了,你现在已经长大了,该学会自己调试代码了!相信大家在编写程序过程中会遇到大量的错误信息,我也不例外的啦~遇到这些问题该怎么解决呢?使用最多的方法就是使用print打印中间变量了哇,关于这种方法怎么说呢~l...
    99+
    2023-01-31
    代码 Python
  • python调试代码举例
    Python自带的pdb库,发现用pdb来调试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的。用pdb调试有多种方式可选:1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一...
    99+
    2023-01-31
    代码 python
  • Django的调试技巧
    本篇内容主要讲解“Django的调试技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Django的调试技巧”吧!Django框架的单步调试在pycharm中,点击Run->选择Debug...
    99+
    2023-06-02
  • Python 代码优化技巧(一)
    分享最近看到的关于代码优化的一些技巧。 if 判断的短路特性 对于and,应该把满足条件少的放在前面,这样当对于大量判断时, 满足条件少的情况直接回导致其后其他表达式不会计算从而节约时间(因为 False and True 还是 Fa...
    99+
    2023-01-31
    代码 技巧 Python
  • 实用调试技巧(2)
    文章目录 6. 如何写出好(易于调试)的代码6.1 优秀的代码:6.2 示范:6.3 const的作用 7. 编程常见的错误7.1 编译型错误7.2 链接型错误7.3 运行时错误 ...
    99+
    2023-10-02
    linux 运维 服务器 算法 c语言 开发语言
  • Python 代码性能优化技巧
    1. Vim2. Eclipse with PyDev3. Sublime Text4. Emacs5. Komodo Edit6. PyCharm7. Wing8. PyScripter9. The Eric Python IDE10. ...
    99+
    2023-01-31
    性能 代码 技巧
  • 如何远程调试Python代码
    这是一篇小记。平时使用python写的代码对外部依赖性都不复杂,这些代码在本地调试,运行没问题之后,就可以放到生产去跑了。然而,最近的一个项目,由于使用了一些内部服务,需要连接到内部的环境进行调试。如果每次都修改代码之后,发布一次到内部环境...
    99+
    2023-01-31
    代码 Python
  • Linux下怎么调试python代码
    本篇内容介绍了“Linux下怎么调试python代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linux下调试pytho代码具体方法日志...
    99+
    2023-06-28
  • Android TV 高效调试技巧
    文章目录一、编译1.1 版本全编1.2 公共单编模块1.3 芯片特有单编模块1.3.1 Uboot1.3.2 boot.img&dt.i...
    99+
    2022-06-06
    调试 技巧 Android
  • Javascript调试技巧有哪些
    今天就跟大家聊聊有关Javascript调试技巧有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 不要使用alert首先,alert只能打印...
    99+
    2022-10-19
  • JavaScript常用的调试技巧
    这篇文章主要讲解了“JavaScript常用的调试技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript常用的调试技巧”吧!以更快的速度和更...
    99+
    2022-10-19
  • Python3 调试技巧 —— 死循环
    说下Python3不使用gdb的自身调试 前情提要:服务器莫名卡死,用网上的方法用gdb,下载了很多组件,包括那个libpython.py,都没什么用,看不到堆栈,也试了保存core文件等等 大事找官方:官方介绍了python3的调试方法...
    99+
    2023-01-30
    技巧
  • JSP调试技巧有哪些
    这篇文章主要介绍“JSP调试技巧有哪些”,在日常操作中,相信很多人在JSP调试技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JSP调试技巧有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!使用...
    99+
    2023-06-28
  • PHP-FPM性能优化:提高网站代码质量的调试技巧
    标题:PHP-FPM性能优化:提高网站代码质量的调试技巧概述:随着互联网的快速发展,网站的性能优化成为了前端和后端开发者们极其关注的焦点之一。而作为后端开发者的我们,如果能够通过调试技巧来提高网站代码的质量和性能,将能够为用户提供更好的体验...
    99+
    2023-10-21
    性能优化 php-fpm 调试技巧
  • wordpress 代码调用方法与技巧集锦
    WordPress模板基本文件 复制代码代码如下:style.css 样式表文件index.php 主页文件single.php 日志单页文件page.php 页面文件archvie.php 分类和日期存档页文件sear...
    99+
    2022-06-12
    wordpress 代码调用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作