Python 3.6/3.7中NoReturn未纳入__all__的原因及合理性咨询
关于
NoReturn在Python 3.6/3.7中无法通过from typing import *导入的问题 首先可以明确:这不是因为NoReturn存在什么危害,更像是版本迭代过程中的一个小疏漏,而非故意遗漏。
- 你提到的issue28556确实在Python 3.6的代码库中添加了
NoReturn类型,但开发人员当时并没有把它同步加入到typing模块的__all__列表里。而__all__的作用就是定义模块对外暴露的公开成员集合,只有在这个列表里的名字,才会被from typing import *这种方式导入。 - 这个问题在Python 3.8中被正式修复,
NoReturn被加入到__all__中,所以从3.8版本开始,from typing import *就能正常导入它了。
从社区相关讨论来看,3.6和3.7版本的遗漏只是功能更新时的疏忽——当时只完成了NoReturn核心功能的开发,却忘了同步更新模块的公开成员列表。它本身没有任何安全或功能上的问题,如果你在3.6/3.7环境中需要使用它,只需要显式导入即可:
from typing import NoReturn # 这样就能正常使用,完全安全
它的功能和3.8及以后版本中的NoReturn完全一致,只是导入方式需要多写一行而已。
内容的提问来源于stack exchange,提问作者AllenT
相关产品推荐
相关产品推荐

