• 技术文章 >常见问题 >Python常见问题

    python代码怎么调试

    (*-*)浩(*-*)浩2019-12-21 13:56:14原创7398
    程序能一次写完并正常运行的概率很小,基本不超过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()来辅助查看的地方,都可以用断言(assert)来替代:

    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!

    程序中如果到处充斥着assert,和print()相比也好不到哪去。不过,启动Python解释器时可以用-O参数来关闭assert:

    logging

    把print()替换为logging是第3种方式,和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就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。

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

    Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug。python 提供了一系列 debug 的工具和包,可供我们选择。本文将主要阐述如何利用 python debug 相关工具进行 debug。

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

    使用 pdb 进行调试

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

    专题推荐:python
    品易云
    上一篇:python矩阵怎么写 下一篇:python怎么调用类方法

    相关文章推荐

    • 什么时候用python• python怎么卸载包• python内置函数在哪• python idle怎么清屏

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网