在我们平时编写程序时,常常会遇到各种错误,俗称BUG。而我们程序猿的工作常常需要对程序进行调试,也就是所谓的debug。

程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。而在 python 程序编写时,常常使用以下几种方法进行调试:

1、使用print 方法,在程序运行的关键处打印出相关信息。	缺点:在程序发行时,需要去除这些调试用代码。
2、使用assert机制,通过使用断言的方式,在程序错误时打印出相关信息。
3、记录日志
4、IDE自带的调试

print调试

print 函数可以打印运行中变量的值以及输出提示信息。

我们可以在可能会发生错误的代码处写上提示,通过if判断或except等方法触发。或者使用print在运行时跟踪某个变量,输出运行状态数值变化等,进行调试。

使用print调试真的是非常方便,简单粗暴,哪里不顺眼加一句print,在运行一遍就能看出效果。但使用print进行debug效率太低。

一般我们在程序的可疑处使用print打印一下,从输出情况判断程序是否发生错误,如果程序中存在的可疑之处过多,或者程序代码过于庞大,显然在每个地方都加print是一件极其低效的事情。另外,在程序发行时还得清除所有多余的print语句,调试代价太大,效率也不高。

使用断言

assert(断言)用于判断一个表达式,如果表达式结果为 false 时触发异常。而结果为 True 则继续执行下一行语句。

断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,例如我们的代码只能在 Linux 系统下运行,可以先判断当前系统是否符合条件。如果条件不满足则中断程序。

‘’‘
该实例引用自 菜鸟教程 runoob.com
’‘’
import sys
assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"

使用assert进行判断,如果条件为 False 则中断程序并输出提示信息。

assert 1>2 , "这是提示信息:错误 1 不小于 2"

输出:
Traceback (most recent call last):
File "F:/untitled/python学习/断言.py", line 5, in <module>
assert 1>2 , "这是提示信息:错误 1 不小于 2"
AssertionError: 这是提示信息:错误 1 不小于 2

另外可以通过 `try…except…`` 捕获错误信息

try:
assert 1>2 , "这是提示信息:错误 1 不小于 2"
except AssertionError as e:
print(e) 输出:
这是提示信息:错误 1 不小于 2

记录日志

如果说我们的程序已经发布无法得到客户运行后的错误信息,或者由于某些原因使用 print 或这 assert 的方式调试不太方便时,我们可以通过记录日志的方式,把每个错误的的信息记录进日志文件,我们通过分析日志文件便可以找到错误的原因,进而进行程序上的调整和优化。

目前还没学会,Mark。以后补上

另外,记录一个 logging.basicConfig 的配置。

# 通过logging.basicConfig函数对日志的输出格式及方式做相关配置
import logging
logging basicConfia(level=logging .DEBUG,
format='%(asctime)s 9%(ilename)l[ine:%(lineno)d] %(levelname)s
%(message)s',
datefmt=*'%a, %d %b %Y %H:%M:%S',
filename='myapp.log',
filemode='w')
logging. debug(This is debug message')
logging.info(This is info message')
logging.warning('This is warning message') ./myapp.log文件中内容为:
Sun, 24 May 2009 21:48:54 demo2 py[line.11] DEBUG This is debug message
Sun, 24 May 2009 21:48:54 demo2 pyl[line.12] INFO This is info message
Sun, 24 May 2009 21:48:54 demo2.pylie: 13] WARNING This is warning message

IDE的集成开发环境

Python IDE还挺多的,

比如PyCharm,PyCharm 官方下载地址:http://www.jetbrains.com/pycharm/download/

Sublime Text, Eclipse+Pydev等等。

我比较推荐 PyCharm,之前也没用过别的IDE,但第一次使用PyCharm就觉得很不错,对我这个python 新人很友好。当然你可以根据自己的喜好来选择适合自己的 Python IDE。比如 vs code就不错,听说vs code已经可以支持可视化 debug 了,虽然目前只支持JavaScript/TypeScript ,不过项目维护者已经在讨论添加对 Python 的支持了。不知道以后能不能实现对 C/C++ 的支持。

咳咳,扯远了,使用IDE调试非常简单,自己动手试试就会了,这里就不再赘述了。

写完博客也去下一个 vs code 玩玩,最后附上vscode-debug-visualizer项目地址:https://github.com/hediet/vscode-debug-visualizer

python学习笔记(六)——程序调试的更多相关文章

  1. Python学习笔记六

    Python课堂笔记六 常用模块已经可以在单位实际项目中使用,可以实现运维自动化.无需手工备份文件,数据库,拷贝,压缩. 常用模块 time模块 time.time time.localtime ti ...

  2. python学习笔记六 面向对象相关下(基础篇)

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以将多函数中公用的变量封装到对象中) 对象,根据模板创建的 ...

  3. python学习笔记六 初识面向对象上(基础篇)

    python面向对象   面向对象编程(Object-Oriented Programming )介绍   对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...

  4. python学习笔记012——pdb调试

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

  5. python学习笔记之pdb调试

    之前一直说要学python可还是一直停留在看的层面,昨天大神手把书教我pdb调试,说要摆脱IDE集成开发环境编程,感激不尽,立一个flag,python一定要入门! 1.进入方式 1)windows ...

  6. python学习笔记六——堆栈和队列

    4.2.3 列表的查找.排序.反转 list列表可以进行添加.删除操作,此外List列表还提供了查找元素的方法.list列表的查找提供了两种方式,一种是使用index方法返回元素在列表中的位置,另一种 ...

  7. python学习笔记(六):常用模块

    一.模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称. 什么是包? 包, ...

  8. python学习笔记03 --------------程序交互与格式化输出

    1.读取用户输入内容 语法:input() 例: name = input('你的名字是?) print('你好'+name) 程序会等待用户输入名字后打印:你好(用户输入的名字) 注意:input接 ...

  9. python学习笔记(六)---文件操作与异常处理机制

    文件读取 读取整个文件 要读取文件,需要一个包含几行文本的文件.下面首先来创建一个文件,它包含精确到小数点后30位的圆周率值,且在小数点后每10位处都换行: pi_digits.txt 3.14159 ...

  10. Python学习笔记六--文件和输入输出

    6.1文件对象 所有Python对文件的操作都是基于对文件对象的操作.那么就从文件对象的创建说起.open()[file()]提供初始化输入输出的接口.open()成功打开文件时会返回一个文件对象. ...

随机推荐

  1. Java课程设计---删除学生

    1.界面已经在上次修改操作的过程添加完成 2.在StudentDao中添加删除方法 public boolean delete(int id) throws SQLException { DbUtil ...

  2. CAS单点登录(一)——初识SSO

    转载:https://blog.csdn.net/Anumbrella/article/details/80821486 一.初识CAS 首先我们来说一下CAS,CAS全称为Central Authe ...

  3. ValueError: not enough values to unpack

    当在同一行为两个变量赋值时,要用分号;而非逗号,隔开

  4. HTTP请求过程和状态响应码

    HTTP请求过程 我们在浏览器中输入一个URL,回车之后便可以在浏览器中观察到页面内容.实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应 ...

  5. C# Md5Hash

    /// <summary> /// MD5 32位加密(大写) /// </summary> /// <param name="str">< ...

  6. JZ-019-顺时针打印矩阵

    顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4 矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...

  7. C# Event (1) —— 我想搞个事件

    本文地址:https://www.cnblogs.com/oberon-zjt0806/p/15975299.html 本文最初来自于博客园 本文遵循CC BY-NC-SA 4.0协议,转载请注明出处 ...

  8. 微信小程序搜索并高亮关键字

    更多解读可使用博客: https://www.jianshu.com/p/86d73745e01c 实现流程:1.在文本框中输入关键字key,如"比赛",检索出比赛相关的列表key ...

  9. eval()计算某个字符串,js和jquery都可以使用

    实例 执行JavaScript代码或表达式: <script>eval("x=10;y=20;document.write(x*y)");document.write( ...

  10. php 23种设计模型 - 工厂模式

    工厂模式(Factory) 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建 ...