【发布时间】:2021-09-23 07:14:13
【问题描述】:
我很久以前就创建了 CustomErr 类(继承自 Python 的 Exception),并且我在代码中的几百个地方使用它。它有一个用def logErr(self) 声明的成员方法。
一段时间后我发现这个函数应该有强制关键字参数logger,所以我把函数的声明改为def logErr(self, *, logger)。
在此更改之后,我预计会出现数百个编译器错误,或者至少会出现警告(因此我可以轻松地进行所需的更改),但它没有发生 - 没有报告一个错误。只有在调用此函数时才会出现运行时异常。
我是否对 Python 编译器和/或我的工作 IDE(我正在使用 Eclipse 和 PyDev 8.1、Python 3.8.7)期望过高?
我需要 Python linter 吗?
【问题讨论】:
-
Python 不是编译语言。这样的错误会在运行时发生,因为即使是方法也可以随时修改或替换。
-
@KlausD。但您通常希望 IDE 会针对此类情况发出警告。
-
欢迎来到 StackOverflow!关于您的问题:似乎无法直接回答。答:是的。您期望静态类型语言的 python 行为。 B. “我需要棉绒吗?” - 由您来决定哪个和哪个设置。我们同时使用其中 3 个:flake8 用于 cicd,pylint 用于手动检查,mypy 用于测试签名
-
在外部工具中,mypy 和 pyright 应该能够看到该错误。 PyCharm IDE 当然可以。正如 Klaus 所说,Python 解释器不在乎。
-
感谢您的回答,我是从 C++ 和 Java 来到 Python 的,所以我的期望很高。我可能会尝试使用 pylint(对于 mypy 来说太晚了)。