Python 如何调试程序崩溃错误


Posted in Python onAugust 03, 2020

问题

你的程序崩溃后该怎样去调试它?

解决方案

如果你的程序因为某个异常而崩溃,运行 python3 -i someprogram.py 可执行简单的调试。 -i 选项可让程序结束后打开一个交互式shell。 然后你就能查看环境,例如,假设你有下面的代码:

# sample.py

def func(n):
 return n + 10

func('Hello')

运行 python3 -i sample.py 会有类似如下的输出:

bash % python3 -i sample.py
Traceback (most recent call last):
 File "sample.py", line 6, in <module>
 func('Hello')
 File "sample.py", line 4, in func
 return n + 10
TypeError: Can't convert 'int' object to str implicitly
>>> func(10)
20
>>>

如果你看不到上面这样的,可以在程序崩溃后打开Python的调试器。例如:

>>> import pdb
>>> pdb.pm()
> sample.py(4)func()
-> return n + 10
(Pdb) w
 sample.py(6)<module>()
-> func('Hello')
> sample.py(4)func()
-> return n + 10
(Pdb) print n
'Hello'
(Pdb) q
>>>

如果你的代码所在的环境很难获取交互shell(比如在某个服务器上面), 通常可以捕获异常后自己打印跟踪信息。例如:

import traceback
import sys

try:
 func(arg)
except:
 print('**** AN ERROR OCCURRED ****')
 traceback.print_exc(file=sys.stderr)

要是你的程序没有崩溃,而只是产生了一些你看不懂的结果, 你在感兴趣的地方插入一下 print() 语句也是个不错的选择。 不过,要是你打算这样做,有一些小技巧可以帮助你。 首先,traceback.print_stack() 函数会你程序运行到那个点的时候创建一个跟踪栈。例如:

>>> def sample(n):
...  if n > 0:
...    sample(n-1)
...  else:
...    traceback.print_stack(file=sys.stderr)
...
>>> sample(5)
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 3, in sample
 File "<stdin>", line 3, in sample
 File "<stdin>", line 3, in sample
 File "<stdin>", line 3, in sample
 File "<stdin>", line 3, in sample
 File "<stdin>", line 5, in sample
>>>

另外,你还可以像下面这样使用 pdb.set_trace() 在任何地方手动的启动调试器:

import pdb

def func(arg):
 ...
 pdb.set_trace()
 ...

当程序比较大而你想调试控制流程以及函数参数的时候这个就比较有用了。 例如,一旦调试器开始运行,你就能够使用 print 来观测变量值或敲击某个命令比如 w 来获取追踪信息。

讨论

不要将调试弄的过于复杂化。一些简单的错误只需要观察程序堆栈信息就能知道了, 实际的错误一般是堆栈的最后一行。 你在开发的时候,也可以在你需要调试的地方插入一下 print() 函数来诊断信息(只需要最后发布的时候删除这些打印语句即可)。

调试器的一个常见用法是观测某个已经崩溃的函数中的变量。 知道怎样在函数崩溃后进入调试器是一个很有用的技能。

当你想解剖一个非常复杂的程序,底层的控制逻辑你不是很清楚的时候, 插入 pdb.set_trace() 这样的语句就很有用了。

实际上,程序会一直运行到碰到 set_trace() 语句位置,然后立马进入调试器。 然后你就可以做更多的事了。

如果你使用IDE来做Python开发,通常IDE都会提供自己的调试器来替代pdb。 更多这方面的信息可以参考你使用的IDE手册。

以上就是Python 如何调试程序崩溃错误的详细内容,更多关于Python调试程序崩溃错误的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
在Python中用get()方法获取字典键值的教程
May 21 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
Python利用operator模块实现对象的多级排序详解
May 09 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
python循环定时中断执行某一段程序的实例
Jun 29 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
pytorch中的自定义数据处理详解
Jan 06 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
理解深度学习之深度学习简介
Apr 14 Python
分享python函数常见关键字
Apr 26 Python
Python 捕获代码中所有异常的方法
Aug 03 #Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 #Python
Python pip使用超时问题解决方案
Aug 03 #Python
python时间序列数据转为timestamp格式的方法
Aug 03 #Python
python3 中使用urllib问题以及urllib详解
Aug 03 #Python
Python txt文件常用读写操作代码实例
Aug 03 #Python
Python连接Mysql进行增删改查的示例代码
Aug 03 #Python
You might like
php正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
javascript 短路法代码精简
2009/08/20 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
Python tkinter三种布局实例详解
2020/01/06 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
适用于所有创业者的创业计划书
2014/02/05 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
公证委托书
2014/08/01 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书