我正在参加单元测试
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()
甚至指向实际使用弃用接口的行呢?
答案 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似乎很奇怪,并且根本没有使用它。也许是由于上述某些限制?