PHP前端开发

python的调试;print()和断言(实例解析二)

百变鹏仔 3小时前 #Python
文章标签 断言

在以下的文章之中我们来了解一下python中的调试。了解一些什么python调试的方法,以及知晓python调试在python编程之中能起到什么样的作用。

为什么要进行调试

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

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

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

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

立即学习“Python免费学习笔记(深入)”;

$ python err.py>>> n = 0Traceback (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.pyTraceback (most recent call last):  ...AssertionError: n is zero!

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

$ python -O err.pyTraceback (most recent call last):  ...ZeroDivisionError: division by zero

关闭后,你可以把所有的assert语句当成pass来看。