VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python常用的程序调试方法

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

1. 断点打印发

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

err.py

1
2
3
4
5
6
7
def foo(s):
  = int(s)
  print '>>> n = %d' % n
  return 10 / n
def main():
  foo('0')
main()

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

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

用print最大的坏处是将来还得删掉它,想想程序里到处都是print,运行结果也会包含很多垃圾信息。所以,我们又有第二种方法。

2. 断言

凡是用print来辅助查看的地方,都可以用断言(assert)来替代:

err.py

1
2
3
4
5
6
def foo(s):
  = int(s)
  assert n != 0'n is zero!'
  return 10 / n
def main():
  foo('0')

assert的意思是,表达式n != 0应该是True,否则,后面的代码就会出错。

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

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

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

1
2
3
4
$ python -O err.py
Traceback (most recent call last):
 ...
ZeroDivisionError: integer division or modulo by zero

相关教程