还可以用assert调试python代码

2020年1月5日 / 37次阅读 / Last Modified 2020年1月16日
Python命令行

不知从什么时候开始,调试代码解决bug,一律采用print打印的方式。其实,python提供了assert函数,在调试代码解决问题的时候,还是很好用的。用print加打印的方式,麻烦的地方在于问题解决后要把所有加的打印删除,使用assert就没有这么麻烦,你可以在源代码中保留这些assert语句。

assert就是我们说的断言,assert后面如果条件不为真,就会抛出AssertionError异常,提示我们代码走到这里,与预计的结果不符。

>>> assert 1==1
>>> assert 1==2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>>
>>> a = 'abc'
>>> assert a=='abc'
>>> assert a!='abc'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>>
>>> assert(a=='abc' and 2==2)
>>> assert(a!='abc' and 2==2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

assert后面跟一个条件判断语句,带括号不带括号,语法上都OK。

assert语句只有在debug模式下才有效,默认都是debug模式。如果不想进入debug模式,我们可以在启动python解释器的时候,增加 -O 参数。

某Python教材中有这样一句话:

In the current implementation, the built-in variable __debug__ is True under normal circumstances, False when optimization is requested (command line option -O). The current code generator emits no code for an assert statement when optimization is requested at compile time.

C:\Users\Administrator>python -O -q
>>> assert 1==2
>>> assert a=='abc'

使用-O后,assert语句被直接忽略,甚至里面的undefined变量a都不会报错。

熟练使用python的assert语句,在某些事情代替print来调试代码,提高生产率和正确性。

-- EOF --

本文链接:https://www.pynote.net/archives/1718

留言区

《还可以用assert调试python代码》有1条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    logging和assert都是可以在不修改代码的情况下调试代码的方法,logging有打印级别,assert可以在python命令行使用-O参数优化掉。 [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top