DeprecationWarning
,PendingDeprecationWarning
和FutureWarning
有什么区别?我在Python 3 documentation看到目标“观众”的期限存在差异,特别是我不理解“开发者”和“最终用户”之间的区别。这个概念对我来说有点模糊。任何人都可以解释和举例吗?
我做了一个小表来总结用例:
+---------------+---------------------------+---------------+
| | Developers | End Users |
+---------------+---------------------------+---------------+
| Now | DeprecationWarning | ??? |
| In the future | PendingDeprecationWarning | FutureWarning |
+---------------+---------------------------+---------------+
最终用户是否有“弃用警告”?
如果我开发自己的库。使用这些警告是一个好主意还是我应该使用别的东西?在哪个用例?
观众问题在很大程度上与某些Python被编写为库的想法有关,旨在供其他编写python脚本的人使用,而某些Python编写的应用程序旨在供那些可能不会使用的人使用。知道任何节目。
您所指的具体描述是Python 3.7中的更改您可以在https://www.python.org/dev/peps/pep-0565/上阅读更改的完整描述,但这里是一个特别相关的部分,其中包含示例用例:
这将提供以下三种不同类别的向后兼容性警告,其中包含三个不同的目标受众:
- PendingDeprecationWarning:默认情况下隐藏所有代码。目标受众是Python开发人员,他们积极关注确保其软件的未来兼容性(例如,具有特定支持义务的专业Python应用程序开发人员)。
- DeprecationWarning:默认情况下报告直接在
__main__
模块中运行的代码(因为这样的代码被认为不太可能有专用的测试套件),但默认情况下隐藏在其他模块中的代码中。目标受众是Python开发人员,他们有可能升级其依赖项(包括升级到Python本身),破坏他们的软件(例如,开发人员使用Python编写脚本环境,其他人可以控制依赖项升级的时间)。- FutureWarning:默认情况下报告所有代码。目标受众是使用Python编写的应用程序的用户,而不是其他Python开发人员(例如,警告在配置文件格式中使用不推荐的设置)。
我不认为你的表格非常准确 - 据我所知,FutureWarning
应该适用于现在被弃用的东西。据我了解这些,DeprecationWarning
的意思是“现在改变你的代码或者它很快会破裂”,PendingDeprecationWarning
的意思是“你最终必须改变一些东西”,而FutureWarning
的意思是“你使用它的方式不是这样的”是正确的,可能会导致以后失败。“
FutureWarning
还用于警告您,在将来的更新中,事情的行为不会相同,即使它们是有效的代码。这可能与开发人员和用户相关。例如,我在实践中看到的许多FutureWarning
s都是某些便利函数的含义可能会改变的东西(就像两个数组的==
为每个元素返回一个True / False数组,或者它返回一个True /假,只有当所有元素都相等时才为真?当numpy想要改变它时,它们会产生一个FutureWarning
)
在开发您的库时,一定要使用它们的这些或子类。如果存在潜在问题,那么使用你的库编写代码的人会期望他们的集成测试会发出DeprecationWarning
s(更准确地说,测试工具可能会特别寻找这些)。