PyCharm 中可以有静态类型断言吗?

问题描述 投票:0回答:3

我希望 Pycharm 在用户将值设置为 int 以外的值时断言。我已经在使用类型提示了。还有其他方法可以实现此功能吗?

def someproperty(self, value):
    """
    :type value: int
    """
    assert isinstance(value, int)
    # other stuff
python pycharm python-typing
3个回答
19
投票

使用 pycharm,您可以在某种程度上接近静态类型检查,使用类型声明并增加“类型检查器”检查的严重性:

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


11
投票

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

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

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

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

您还可以观看 Guido van Rossum 在上一届 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 虽然在技术上处于实验阶段,但它是一个非常强大、运行良好的工具。如果您对此感兴趣并且愿意采用类型注释,那么您应该真正检查一下。


2
投票

PyCharm 5 似乎支持 PEP 484。对于 PyCharm 5 和 Python 3.5,这个问题的一个答案是使用类型提示。

© www.soinside.com 2019 - 2024. All rights reserved.