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

时间:2017-08-14 08:55:46

标签: 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)

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

expit(np.array([0.0]))

解决了这个问题。

我想我明白PyCharm想告诉我什么 - 有可能出现类型错误,但我不确定如何在良好的编程意义上对此作出反应。 PyCharm是正确的骂我,我应该使用长版本还是应该保留我的简短版本以提高可读性和编码速度?

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

3 个答案:

答案 0 :(得分:2)

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

您的问题简化为了解如何禁用此类型检查。你可以这样做:

  1. 转到Settings/Preferences

  2. 在侧边栏上,点击Inspections

  3. 展开Python标签

  4. 向下滚动到Incorrect Call Arguments并取消选中

  5. PyCharm现在应该停止发出有关错误函数参数的警告。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

这确实很烦人,即使PyCharm正确,也无法识别某些类型。