断言语句有副作用¶
ID: py/side-effect-in-assert
Kind: problem
Security severity:
Severity: error
Precision: high
Tags:
- reliability
- maintainability
Query suites:
- python-security-and-quality.qls
当请求优化时,断言语句中定义的所有代码都会被忽略,也就是说,程序使用 -O
标志运行。如果断言语句有任何副作用,那么程序在请求优化时其行为就会发生改变。
建议¶
将所有带有副作用的表达式移出断言语句。
示例¶
在示例中,subprocess.call()
的退出代码与 0 进行比较,但整个表达式是从 assert
语句中调用的。如果代码曾经运行,那么不仅断言本身,而且外部调用也会被丢弃。最好将 subprocess.call()
的结果保存到一个临时变量中,然后断言该变量为 0。
assert subprocess.call(['run-backup']) == 0
参考资料¶
Python 语言参考:断言语句.
TutorialsPoint,Python 编程:Python 中的断言.