如何通过包触发弃用警告?

时间:2019-02-28 14:48:25

标签: python

我正在参加单元测试

Array
(
    [lid] => 60
)

我将此追溯到相关文件werkzeug/local.py:347: DeprecationWarning: json is deprecated. Use get_json() instead. 。令人讨厌的行是以下方法中的最后一行。

venv/lib/python3.6/site-packages/werkzeug/local.py

def __getattr__(self, name): if name == '__members__': return dir(self._get_current_object()) return getattr(self._get_current_object(), name) # Line 347 移到request.get_json()似乎已经很老了(2013?),并且Werkzeug文件中的快速递归grep显示未使用request.json。 使用request.json而非request.json的冒犯代码似乎是我自己的。我的静脉中的Werkzeug和Flask均为0.12.2。

如何通过包触发弃用警告,而没有request.get_json()甚至指向实际使用弃用接口的行呢?

1 个答案:

答案 0 :(得分:0)

我不认为该软件包本身会触发DeprecationWarning。 Pytest正在查看代码,并警告您已弃用该代码,该代码可能会或可能不受您控制。

  

默认情况下,pytest将显示DeprecationWarning和   来自用户代码和第三方的PendingDeprecationWarning警告   库,如PEP-0565所建议。这有助于用户保持他们的   编写现代代码,并在过时的警告出现时避免损坏   有效删除。

     

有时,隐藏一些特定的弃用警告会很有用,   发生在您无法控制的代码中(例如第三方   库),在这种情况下,您可以使用警告过滤器选项   (ini或标记)来忽略这些警告。

关于弃用警告的触发方式及其应归于何处,看来PEP 565上面有话要说:

  

在Python 2.7和Python 3.2中,默认警告过滤器已更新   隐藏默认情况下的DeprecationWarning,例如弃用警告   本身就是用Python编写的开发工具(例如   短绒,静态分析器,测试运行器,代码生成器),以及   任何其他恰好用Python编写的应用程序,   除非这些用户明确选择,否则对他们的用户不可见   来看看他们。

     

但是,这种更改带来了不幸的副作用   弃用警告在其主要目的上效果明显较差   目的:提前通知API的重大更改(是否   在CPython,标准库或第三方库中)   这些API的用户。

     

为改善这种情况,本PEP建议对   默认警告过滤器:显示弃用警告   默认情况下归属于主模块。

关于您的json弃用警告来自何处,pytest将您指向Werzkug似乎很奇怪,并且根本没有使用它。也许是由于上述某些限制?