DeprecationWarning,PendingDeprecationWarning和FutureWarning之间的差异

问题描述 投票:0回答:1

DeprecationWarningPendingDeprecationWarningFutureWarning有什么区别?我在Python 3 documentation看到目标“观众”的期限存在差异,特别是我不理解“开发者”和“最终用户”之间的区别。这个概念对我来说有点模糊。任何人都可以解释和举例吗?

我做了一个小表来总结用例:

+---------------+---------------------------+---------------+
|               | Developers                | End Users     |
+---------------+---------------------------+---------------+
| Now           | DeprecationWarning        | ???           |
| In the future | PendingDeprecationWarning | FutureWarning |
+---------------+---------------------------+---------------+

最终用户是否有“弃用警告”?

如果我开发自己的库。使用这些警告是一个好主意还是我应该使用别的东西?在哪个用例?

python warnings deprecated
1个回答
1
投票

观众问题在很大程度上与某些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还用于警告您,在将来的更新中,事情的行为不会相同,即使它们是有效的代码。这可能与开发人员和用户相关。例如,我在实践中看到的许多FutureWarnings都是某些便利函数的含义可能会改变的东西(就像两个数组的==为每个元素返回一个True / False数组,或者它返回一个True /假,只有当所有元素都相等时才为真?当numpy想要改变它时,它们会产生一个FutureWarning

在开发您的库时,一定要使用它们的这些或子类。如果存在潜在问题,那么使用你的库编写代码的人会期望他们的集成测试会发出DeprecationWarnings(更准确地说,测试工具可能会特别寻找这些)。

© www.soinside.com 2019 - 2024. All rights reserved.