在我们平时编写程序时,常常会遇到各种错误,俗称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. 基于IEC61499标准的组件

    IEC 61499标准通常用于开发分布式控制系统.IEC 61499定义了功能模块(FB, function block)的模型.有三种FB,分别是Basic FB (BFB),Service Int ...

  2. WPF中TreeView控件数据绑定和后台动态添加数据(一)

    数据绑定: 更新内容:补充在MVVM模式上的TreeView控件数据绑定的代码. xaml代码: <TreeView Name="syntaxTree" ItemsSourc ...

  3. 由浅入深--ORM简介

    一.ORM简介 从传统的JDBC开始说起 下面是通过JDBC连接Oracle的步骤,如下代码所示: Connection conn = null; PreparedStatement stmt = n ...

  4. Oracle PSU 简介

    转至:http://blog.itpub.net/30327022/viewspace-2642815/ Oracle RAC创建完毕后,我们通常需要打上最新的PSU,因为里面是包含GI和DB的补丁集 ...

  5. Weblogic补丁升级问题

    转至:https://blog.csdn.net/weixin_44659716/article/details/105132466 一.版本信息1)中间件版本 Weblogic10.3.6.02) ...

  6. MySQL查看数据库中所有表占用的空间大小

    select TABLE_NAME, concat(truncate(data_length/1024/1024,2),'MB') as data_size, concat(truncate(inde ...

  7. MySQL:Win10系统中设置默认编码为UTF-8

    Win10 系统下 Mysql 字符集(utf8)的设置 补充: 在[mysqld]下添加语句:init_connect='SET collation_connection = utf8_unicod ...

  8. C++_Leecode20有效的括号

    一.题目介绍 1.题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正 ...

  9. Spark SQL和CSl

    目录 1 2 3 4 1 import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession} object Demo1Sess { def ...

  10. JAVA基础01----第1章Java开发环境搭建

    一. Java开发环境中涉及的名词:JDK,JRE,JVM A:什么是JVM JVM是java虚拟机(JVM Java Virtual Machine),java程序需要运行在虚拟机上,不同平台有自己 ...