我已经多次看到以下模式:

if value > MAX_VALUE:
    ApplicationError("value is too large")

# value is in range now
use_value(value)

这里有一个明显但相对容易忽略的错误:ApplicationError中缺少关键字raise.构造但不引发异常对象,并且无效value继续到函数的其余部分.

我们使用flke8、pyright和一组精选的pylint lints.我的期望是some sort%的静态分析工具会发现这个问题:

  • 要么通过检测到我正在创建异常实例,而不引发它,
  • 或者(更简单地),我正在创建一个类的实例,但不存储结果(这可以用于副作用,但它绝对是反模式,对吗?)
  • 或者(最常见的)存在未使用结果的函数调用

最后一个 Select 看起来至少应该是Mypy/Pyright能够捕捉到的,但我完全找不到any sort个林特来做这个.

有没有一个针对Python代码的linting工具可以检测到这个问题(缺少raise个关键字),以及如何配置它来检测这个问题?

推荐答案

pointless-exception-statement可以做你想做的,这是一个默认激活的内置判断,请参见https://pylint.readthedocs.io/en/latest/user_guide/messages/warning/pointless-exception-statement.html

Python相关问答推荐

Odoo -无法比较使用@api.depends设置计算字段的日期

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

Pandas 滚动最接近的价值

如何删除索引过go 的lexsort深度可能会影响性能?' &>

未删除映射表的行

计算组中唯一值的数量

无法定位元素错误404

使用密钥字典重新配置嵌套字典密钥名

driver. find_element无法通过class_name找到元素'""

使用NeuralProphet绘制置信区间时出错

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

Django RawSQL注释字段

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

在两极中过滤

为什么常规操作不以其就地对应操作为基础?

python sklearn ValueError:使用序列设置数组元素

以异步方式填充Pandas 数据帧

Python将一个列值分割成多个列,并保持其余列相同

删除特定列后的所有列

Pandas数据框上的滚动平均值,其中平均值的中心基于另一数据框的时间