我今天开始使用类型提示。在阅读了有关类型提示的文档后,我尝试编写一些愚蠢的示例来检查它是如何工作的,但被困在像这样简单的事情上。
a: int = 7.33
我没有收到任何警告或错误。一切都正常,就像我没有使用类型提示一样。我期待一个警告,说浮点数不能分配给 int var。
我尝试过其他事情,例如:
def sum_two_numbers(a:int , b:int)->int:
return a+b
def main() -> None:
asd = sum_two_numbers(2, 5.4)
并且正如预期的那样,我在 5.4 数字中收到警告。 Pycharm 警告我传递的浮点数应该是 int。
那么,这里发生了什么?
编辑:我已经尝试过 mypy,它正确地检测到了我之前提到的问题。有没有办法让 pycharm 也检测到它?
干杯。
是对的,PyCharm 2018.1 不提供类型提示的运行时类型检查。虽然 PyCharm 可以在编写代码时推断类型并提供一些警告,但它不会将类型注释强制为运行时错误。
这是因为 Python 的类型提示旨在作为 静态分析 工具,主要用于像 MyPy 这样的工具,而不是在运行时强制执行。当你像这样声明一个变量时:
a: int = 7.33
只是在告诉类型检查器
a
应该是一个整数。但是,Python 仍然是一种动态类型的语言,它实际上会很乐意将
7.33
(一个浮点数)分配给
a
,而不会在运行时出错。
以下是可以做的选择:
-
使用 MyPy 进行静态分析: 如所述,MyPy 可以检测到此类类型错误。可以在的代码库上运行 MyPy,它会标记出任何类型违规。可以将 MyPy 集成到的 IDE 或构建过程中,以便在开发的早期阶段捕获这些错误。
-
升级 PyCharm: PyCharm 的更新版本可能包含对类型提示的改进支持。请考虑升级到最新版本,看看是否提供了任何相关的增强功能。
-
使用运行时类型检查库: 一些库,例如
typeguard
和enforce
,可以在运行时强制执行类型提示。但是,这些库确实会带来一些性能开销,并且可能会改变 Python 的动态特性。
总而言之,虽然 PyCharm 使用类型提示提供了一些代码洞察和警告,但它不会在运行时强制执行它们。对于更严格的类型检查,请考虑使用 MyPy 或运行时类型检查库。
标签:python,pycharm,python-typing From: 49859151