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

时间:2015-10-20 03:11:16

标签: python pycharm

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

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

3 个答案:

答案 0 :(得分:14)

使用pycharm,你可以使用类型声明和增加“类型检查器”检查的严重性来接近静态类型检查:

enter image description here

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

enter image description here

答案 1 :(得分:9)

Python最近在静态类型方面有了很大的发展。从Python 3.5开始,键入提示是一件事。这就是PEP 0484的全部内容。类型提示语法完全基于早期使用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,虽然技术上是实验性的,但它是一个非常强大的工具,非常有效。如果您正在使用类型注释,那么您应该检查它。

答案 2 :(得分:1)

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