DeprecationWarning,PendingDeprecationWarning和FutureWarning之间的区别

时间:2019-03-27 12:59:37

标签: python warnings deprecated

DeprecationWarningPendingDeprecationWarningFutureWarning有什么区别?我在Python 3 documentation中看到目标“受众”的术语有所不同,尤其是我不理解“开发人员”和“最终用户”之间的差异。这个概念对我来说有点模糊。谁能解释和举例?

我做了一张小桌子来总结用例:

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

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

如果我开发自己的库。使用这些警告是个好主意还是应该使用其他内容的子类?在哪种情况下?

1 个答案:

答案 0 :(得分: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应该用于 now 弃用的物品。据我了解,DeprecationWarning的意思是“现在更改代码,否则将很快失效”,PendingDeprecationWarning的意思是“您最终将不得不更改某些内容”,而FutureWarning的意思是“您使用这种方式的某些方法是不正确的,以后可能会导致失败。”

FutureWarning还用于警告您,即使它们将是有效的代码,在将来的更新中行为也不一样。这可能与开发人员和用户有关。例如,我在实践中见过的许多FutureWarning是某些便利函数的含义可能会改变的事物(例如两个数组的==会为每个元素返回一个True / False数组) ,还是仅当所有元素都相等时才返回单个True / False,True?当numpy想要更改此值时,它们会生成一个FutureWarning

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