modified-iterating-set (PLE4703)
源自 Pylint 代码检查工具。
修复总是可用的。
此规则不稳定且处于预览状态。使用需要 --preview
标志。
作用
检查在迭代期间修改 set
的循环。
为什么这不好?
如果在迭代期间修改 set
,将导致 RuntimeError
。
如果需要在循环中修改 set
,请考虑迭代 set
的副本。
已知问题
此规则偏好于漏报而非误报。具体来说,它只会检测可以推断为基于本地类型推断的 set
类型的变量,并且只会检测直接对变量本身进行的修改(例如,set.add()
),而不是在其他函数调用中进行的修改(例如,some_function(set)
)。
示例
建议改为
修复安全性
此修复始终是不安全的,因为它会更改程序的行为。在迭代期间用副本替换原始集合允许以前会引发 RuntimeError
的代码在没有错误的情况下运行。