2020年1月5日 / 102次阅读 / Last Modified 2021年2月20日
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。(正如if后面的条件判断,有无括号都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来调试代码,提高生产率和正确性。
让抛出的assert有更丰富的信息:
>>> assert 1==2, 'you got an error'
Traceback (most recent call last):
File "<stdin>", line 1, in "<module>
AssertionError: you got an error
>>>
>>> assert(1==2), 'you got an error'
Traceback (most recent call last):
File ""<stdin>", line 1, in "<module>
AssertionError: you got an error
-- EOF --
本文链接:https://www.pynote.net/archives/1718
《还可以用assert调试python代码》有2条留言
前一篇:tkinter窗口的after方法
后一篇:python模块交叉引用的错误案例
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记
python的assert是一条语句,用-O参数可以让其无效。 [ ]
logging和assert都是可以在不修改代码的情况下调试代码的方法,logging有打印级别,assert可以在python命令行使用-O参数优化掉。 [ ]