知行编程网知行编程网  2022-08-28 14:30 知行编程网 隐藏边栏  10 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python代码怎么调试的相关知识,包括Python怎么多次调试,以及python代码调试是什么意思这些编程知识,希望对大家有参考作用。

程序能一次写完并正常运行的概率很小,基本不超过1%。总会有各种各样的bug需要修正。有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug。

如何调试python代码

python学习网,大量的免费
,欢迎在线学习!


第一种方法简单直接粗暴有效,就是用print()把可能有问题的变量打印出来看看

def foo(s):
    n = int(s)
    print('>>> n = %d' % n)
    return 10 / n
 
def main():
    foo('0')
 
main()

执行后在输出中查找打印的变量值:

$ python err.py
>>> n = 0
Traceback (most recent call last):
...
ZeroDivisionError: integer division or modulo by zero

使用 print() 的缺点是你将来必须将其删除。想想程序中到处都是print(),运行的结果也会包含很多垃圾信息。所以,我们有第二种方法。


断言

无论哪里使用 print() 来帮助查看,都可以使用断言来代替:

def foo(s):
    n = int(s)
    assert n != 0, 'n is zero!'
    return 10 / n
 
def main():
    foo('0')

assert表示表达式n!= 0应该为True,否则按照程序运行的逻辑,下面的代码肯定会出错。

如果断言失败,assert语句本身就会抛出AssertionError:

$ python err.py
Traceback (most recent call last):
...
AssertionError: n is zero!

如果程序充满了断言,它并不比 print() 好多少。但是,可以在启动 Python 解释器时使用 -O 参数关闭断言:


logging

用日志替换 print() 是第三种方法。与assert相比,logging不会抛出错误,可以输出到文件:

import logging
s = '0'
n = int(s)
logging.info('n = %d' % n)
print(10 / n)

logging.info() 可以输出一段文本。运行,发现除了 ZeroDivisionError 之外没有任何信息。发生了什么?

在import logging之后添加一行配置再试试:

import logging
logging.basicConfig(level=logging.INFO)

看到输出了:

$ python err.py
INFO:root:n = 0
Traceback (most recent call last):
  File "err.py", line 8, in <module>
    print(10 / n)
ZeroDivisionError: division by zero

这就是 logging 的好处,它可以让你指定日志信息的级别,有 debug、info、warning、error 等几个级别。当我们指定 level=INFO 时,logging.debug 将不起作用。同样,指定 level=WARNING 后,debug 和 info 将不起作用。这样就可以在不删除的情况下安全地输出不同层次的信息,最终控制输出哪一层的信息。

日志的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如控制台和文件。

调试对于任何开发者来说都是一项非常重要的技能,它可以帮助我们准确地定位错误并发现程序中的错误。 Python 提供了一系列的调试工具和包供我们选择。本文将主要讲解如何使用python调试相关工具进行调试。


第4种方式是启动Python的调试器pdb

使用 pdb 进行调试

pdb 是 python 自带的一个包。它为python程序提供了交互式源代码调试功能。主要功能包括设置断点、单步调试、进入函数调试、查看当前代码、查看堆栈片段、动态变化变量等。价值等

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享