【问题标题】:Is it possible to have static type assertions in PyCharm?PyCharm 中是否可以有静态类型断言?
【发布时间】:2016-01-18 13:29:51
【问题描述】:
def someproperty(self, value):
    """
    :type value: int
    """
    assert isinstance(value, int)
    # other stuff

我希望 Pycharm 在用户将值设置为非 int 值时断言。我已经在使用类型提示了。有没有另一种方法来获得这个功能?提前感谢您提供的任何见解。

【问题讨论】:

标签: python pycharm


【解决方案1】:

使用 pycharm 可以稍微接近静态类型检查、使用类型声明并增加“类型检查器”检查的严重性:

这将使类型检查在您的代码中非常突出:

【讨论】:

    【解决方案2】:

    Python 最近在静态类型方面有了很大的发展。从 Python 3.5 开始,类型提示是一回事。这就是PEP 0484 的全部意义所在。类型提示语法完全基于之前在PEP 3107 中引入的函数注释语法。这使得 PEP 0484 成为一个不涉及新语法的更改,这使得它非常有吸引力且易于适应。

    那么,它是如何工作的?对于简单的情况,语法实际上非常直观。例如:

    def greeting(name: str) -> str:
        return 'Hello ' + name
    

    类型提示系统也支持非常复杂的东西。您还可以使用用户类型、可调用对象、使用联合的多个重载,甚至是泛型类型。您可以在 PEP 本身中看到很多示例。

    你也可以看Guido van Rossum’s talk关于上一届 PyCon 的类型提示,真的很有趣,涵盖了很多细节。

    最后,有了所有这些类型提示,我们如何处理它们?好吧,这个很棒的库已经存在了一段时间,早在 Python 3.5 和 PEP 0484 之前。实际上,现在正式引入的类型提示语法是基于该库的,但只是形式化了。该库名为mypy,基本上是 Python 的静态类型检查器。安装后,您可以使用 mypy 可执行文件对任何包含类型注释的 Python 脚本进行类型检查。

    例如,让我们将上面的函数定义放在一个文件中,并使用错误的类型参数调用它:

    greeting(123)
    

    在文件上运行 mypy,得到以下输出:

    $ mypy test.py
    test.py:4: error: Argument 1 to "greeting" has incompatible type "int"; expected "str"
    

    mypy 虽然在技术上是实验性的,但它是一个非常强大且运行良好的工具。如果你喜欢这个东西并且会采用类型注释,那么你真的应该去看看。

    【讨论】:

    • 是否可以与 PyCharm 集成?
    • @DagHøidahl 根据this page 和我发现的其他一些来源,代码完成实际上支持使用函数注释的类型提示。这只是需要单独运行的 mypy 验证。
    【解决方案3】:

    PyCharm 5 seems to support PEP 484。因此,对于 PyCharm 5 和 Python 3.5,这个问题的一个答案是使用类型提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2012-12-12
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多