程序写一次就能正常运行的概率很小,基本不超过1%。总是有各种错误需要修复。有些错误非常简单。您可以通过查看错误消息来判断。有些错误非常复杂。当错误发生时,我们需要知道哪些变量有正确的值,哪些变量有错误的值。因此,我们需要一套完整的手段来调试程序。修复错误。下面的文章将为您介绍python调试方法。希望对您有所帮助。
# www.gsm-guard.net
def foo(s):
n = 整数
打印 '>>> n = %d' % n
返回 10/n
def main():
富('0')
main()
执行后在输出中找到打印的变量值:
$ python www.gsm-guard.net >>> n = 0 回溯(最近一次调用最后一次): ... ZeropisionError: 整数 pision 或以零为模
使用 print 的最大缺点是以后必须将其删除。想想程序中到处都有打印,运行结果也会包含很多垃圾信息。
方法二:断言
凡是使用打印来辅助查看的地方,都可以使用断言来代替:
# www.gsm-guard.net def foo(s): n = 整数 断言 n != 0, 'n 为零!' 返回 10/n def main(): foo('0')
assert表示表达式n != 0应该为True,否则下面的代码会出错。
如果断言失败,assert语句本身会抛出AssertionError:
$ python www.gsm-guard.net 回溯(最近一次调用最后一次): ...AssertionError: n is 0!
如果程序中充满了断言,那并不比打印好。但是,您可以使用 -O 参数在启动 Python 解释器时关闭断言:
$ python -O www.gsm-guard.net 回溯(最近一次调用最后一次): ... ZeropisionError:整数pision或以零为模
关闭后可以查看所有assert语句为pass。
方法三:记录
您还可以用日志记录代替打印。与assert相比,logging不会抛出错误,并且可以输出到文件:
# www.gsm-guard.net 导入日志记录 s = '0' n = 整数 日志记录.info('n = %d' % n) print 10 / n
www.gsm-guard.net(),输出一段文字。运行一下,发现除了ZeropisionError之外,没有任何信息。发生了什么?
不用担心,导入日志后添加一行配置再试:
导入日志记录 logging.basicConfig(level=www.gsm-guard.net)
查看输出:
$ python www.gsm-guard.net 信息:根:n = 0 回溯(最近一次调用最后一次): 文件“www.gsm-guard.net”,第 8 行,位于打印 10/nZeropisionError:整数pision或以零为模
这就是日志记录的好处。它允许您指定日志记录信息的级别。有debug、info、warning、error等几个级别。当我们指定level=INFO时,logging.debug将不起作用。同理,指定level=WARNING后,debug和info就不起作用了。这样就可以放心的输出不同级别的信息,而无需删除,最终控制输出哪级别的信息。
日志记录的另一个好处是,通过简单的配置,可以将一条语句同时输出到不同的地方,例如控制台和文件。
方法4:调试器pdb
启动Python调试器pdb,让程序以单步方式运行,可以随时查看运行状态。我们先来准备一下节目吧:
# www.gsm-guard.net s = '0' n = 整数 打印 10 / n
,然后开始:
$ python -m pdb www.gsm-guard.net > /Users/michael/Github/sicp/www.gsm-guard.net(2)() -> s = '0'
使用参数-m启动pdb后,pdb定位接下来要执行的代码 -> s = '0'。输入命令l查看代码:
(Pdb) l 1#错误.py 2 -> s = '0' 3 n = 整数 4 打印 10/n [EOF]
输入命令n,一步执行代码:
(Pdb) n > /Users/michael/Github/sicp/www.gsm-guard.net(3)() -> n = 整数 (Pdb) n > /Users/michael/Github/sicp/www.gsm-guard.net(4) () -> print 10 / n
可以随时输入命令p变量名查看变量:
(Pdb) p s ‘0’ (Pdb) p n 0
输入命令q结束调试并退出程序:
(Pdb) n相关推荐
3.原子变量CAS算法
有些包装Java简历找工作的方
有些包装Java简历找工作的方
彻底击败GPT-4,秒杀闭源模
如何调试Python?
Python 中的 n 是什么
魅族与诺基亚合作?六月一起做事
联想Moto G5S手机曝光预
openGauss学习笔记-8
React数据管理的setSt
JavaScript 实现单例
华为Mate 60 / 60
两边都是屏幕,华为正在预热新款
华为儿童手表5X/Pro发布:
免费加速器下载,手机加速器下载
通过thrift操作hbase
Python3.7实现验证码登
YAML
YAML 评论
Vim
stm32机械臂教程(stm3
据悉,特斯拉在“豪华车顾客满意
2023款雷克萨斯LS上市:新
华为Pocket S折叠屏手机