如何处理 PyCharm 的“预期类型 X,改为 Y”

Mak*_*e42 15 python numpy pycharm

使用 PyCharm 时,Expected type 'Union[ndarray, Iterable]', got 'float' instead如果我编写np.array(0.0). 当我写作时,np.array([0.0])我没有收到任何警告。

编码时

from scipy.special import expit
expit(0.0)
Run Code Online (Sandbox Code Playgroud)

我得到的Expected type 'ndarray', got 'float' instead,而

expit(np.array([0.0]))
Run Code Online (Sandbox Code Playgroud)

解决了这个问题。

我认为 Pycharm 的代码风格检查想告诉我的是存在类型错误的可能性,但我不确定在良好编程的意义上我应该如何应对。PyCharm 责备我是否正确,我应该使用长版本还是应该保留我的短版本以提高可读性和编码速度?

如果我不应该将我的代码更改为长版本 - 我可以摆脱 Pycharm 的代码样式检查警告,或者这是一个坏主意,因为它们在其他情况下可能是正确的,而且我无法调整警告具体来说?

Jos*_*lff 30

如果您想忽略该特定行,

然后你可以把

# noinspection PyTypeChecker
Run Code Online (Sandbox Code Playgroud)

位于正在标记的代码行上方。

  • 这应该是公认的答案,下面的答案完全禁用警告,很多时候这是一个有效/重要的警告,您应该只在您知道它报告误报的情况下禁用它。 (2认同)

cs9*_*s95 10

PyCharm 根据源代码的类型提示确定您传递的参数不正确。


如何禁用

您的问题简化为弄清楚如何禁用此类型检查之一。但是,请注意,

完全关闭检查不是一个好的解决方案。大多数情况下,PyCharm 都是正确的,这提供了有用的反馈。如果弄错了,最好向他们提出一张票,看看是否可以修复。

你可以这样做:

  1. Settings/Preferences

  2. 在侧边栏上,单击 Inspections

  3. 展开Python选项卡

  4. 向下滚动Type Checker并取消选中它

PyCharm 现在应该停止发出有关不正确函数参数的警告。

  • 完全关闭检查并不是一个好的解决方案。大多数时候,PyCharm 都是正确的,这提供了有用的反馈。如果出现错误,最好向他们提出罚单,看看是否可以修复。 (4认同)

hol*_*web 5

查看expit 函数规范。那里没有说允许提供标量参数 - 它要求一个numpy.ndarray. PyCharm 足够聪明,可以告诉您任何可迭代(以及列表)都是可以接受的,但此消息不是警告 - 它告诉您您编写的代码不符合函数的规范。正如@JonClements 在评论中指出的那样,numpy的标量广播功能将允许此代码运行,但 PyCharm 不够聪明,无法推断出这一点。

注意:@cs95 的答案解释了如何禁用类型检查,它可能更适合作为公认的答案。