是否可以在 PyCharm 中使用静态类型断言?

Is it possible to have static type assertions in PyCharm?

def someproperty(self, value):
    """
    :type value: int
    """
    assert isinstance(value, int)
    # other stuff

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

使用 pycharm 您可以稍微接近静态类型检查,使用类型声明并增加 "Type checker" 检查的严重性:

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

Python 最近在静态类型方面有了很大的发展。从 Python 3.5 开始,类型提示很重要。这就是 PEP 0484 was all about. The type hinting syntax is completely based on the function annotation syntax that was introduced way earlier with PEP 3107。这使得 PEP 0484 成为一个不涉及新语法的更改,这使其非常有吸引力且易于适应。

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

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

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

你也可以在上次 PyCon 上观看 Guido van Rossum’s talk 关于类型提示的内容,它真的很有趣并且涵盖了很多细节。

最后,有了所有这些类型提示,我们如何处理它们?好吧,这个很棒的库已经存在了一段时间,早在 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 5 seems to support PEP 484。 PyCharm 5 和 Python 3.5 的这个问题的一个答案是使用类型提示。