我已经多次看到以下模式:
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
个关键字),以及如何配置它来检测这个问题?