繁体   English   中英

如何处理 PyCharm 的“预期类型 X,得到 Y”

[英]How to deal with PyCharm's "Expected type X, got Y instead"

使用 PyCharm 时,如果我编写np.array(0.0) ,Pycharm 的代码样式检查会给我警告Expected type 'Union[ndarray, Iterable]', got 'float' instead在编辑器中。 当我写np.array([0.0])时,我没有收到任何警告。

编码时

from scipy.special import expit
expit(0.0)

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

expit(np.array([0.0]))

解决了这个问题。

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

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

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


如何禁用

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

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

你可以这样做:

  1. 转到Settings/Preferences

  2. 在侧边栏上,单击Inspections (在编辑器类别下)

  3. 展开Python选项卡

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

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

如果您想为该特定行忽略它,

然后你可以把

# noinspection PyTypeChecker

在被标记的代码行上方。

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

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

正如@brunodd 之前在评论中所说,取消选中的正确标签是Type checker

  • 转到Settings/PreferencesCtrl + Alt + S
  • 在侧边Inspections
  • Python选项卡
  • 取消选中Type Checker并点击Apply

这真的很烦人,PyCharm 无法识别某些类型,即使它是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM