繁体   English   中英

如何使用Python3.5类型作为运行时检查?

[英]How to use Python3.5 typing as runtime checks?

我使用Python3.5输入模块,以便为我的类和函数提供类型提示。 利用这些提示,它可以与PyCharm配合使用。

但是,我想强制python解释器在提供提示类型时(或至少引发一些警告)执行运行时类型检查。

当前状态:

In [1]: def times2(number: int):
   ...:     return number + number
   ...: 

In [2]: times2(8)
Out[2]: 16

In [3]: times2('8')
Out[3]: '88'

所需状态:

In [1]: def times2(number: int):
   ...:     return number + number
   ...: 

In [2]: times2(8)
Out[2]: 16

In [3]: times2('8')
Out[3]: Assertion error: '8' is not an int

我可以以某种方式强制执行python吗?

您可以这样使用断言:

def times2(number: int):
    assert type(number) is IntType, "number is not an int: %r" % number
    return number + number

还是我误解了你的问题?

来自https://www.python.org/dev/peps/pep-0484/#non-goals

虽然建议的键入模块将包含一些用于运行时类型检查的构建块[…]第三方包将不得不开发以实现特定的运行时类型检查功能

还应该强调的是,Python仍将是一种动态类型化的语言,并且即使按照约定,作者也不希望使类型提示成为强制性的。

Python键入被设计为一种皮棉工具,以便开发人员可以检查其代码是否正确调用了其他代码(就键入支持而言-已检查类型,但您仍然可以具有无效值!)。 它不用于运行时检查,也不用于验证或拒绝用户输入。 其他库可以在stdlib( https://docs.python.org/3/library/dataclasses.html )或第三方( https://github.com/search?q = python + runtime + typing&type = Repositories )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM