跳到内容

no-explicit-stacklevel (B028)

源自 flake8-bugbear linter。

修复总是可用的。

作用

检查没有显式 stacklevel 关键字参数的 warnings.warn 调用。

为什么这不好?

warnings.warn 方法默认使用 stacklevel 为 1,这将输出调用 "warn" 方法的行上的堆栈帧。将其设置为更高的数字将输出堆栈中更高的堆栈帧。

建议使用 stacklevel 为 2 或更高的值,以便为调用者提供有关警告的更多上下文。

示例

import warnings

warnings.warn("This is a warning")

建议改为

import warnings

warnings.warn("This is a warning", stacklevel=2)

修复安全性

此规则的修复被标记为不安全,因为它会改变代码的行为。此外,修复程序将分配 stacklevel 为 2,而用户可能希望分配更高的 stacklevel 以解决诊断问题。

参考