CodeQL 文档

断言语句有副作用

ID: py/side-effect-in-assert
Kind: problem
Security severity: 
Severity: error
Precision: high
Tags:
   - reliability
   - maintainability
Query suites:
   - python-security-and-quality.qls

点击查看 CodeQL 仓库中的查询

当请求优化时,断言语句中定义的所有代码都会被忽略,也就是说,程序使用 -O 标志运行。如果断言语句有任何副作用,那么程序在请求优化时其行为就会发生改变。

建议

将所有带有副作用的表达式移出断言语句。

示例

在示例中,subprocess.call() 的退出代码与 0 进行比较,但整个表达式是从 assert 语句中调用的。如果代码曾经运行,那么不仅断言本身,而且外部调用也会被丢弃。最好将 subprocess.call() 的结果保存到一个临时变量中,然后断言该变量为 0。

assert subprocess.call(['run-backup']) == 0

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私