9

从 django 1.3 升级到 django 1.5 后,我DeprecationWarnings在测试运行期间开始看到这些:

path_to_virtualenv/lib/python2.6/site-packages/django/http/request.py:193:DeprecationWarning:HttpRequest.raw_post_data 已被弃用。请改用 HttpRequest.body。

我在项目内部进行了搜索,但raw_post_data一无所获。所以没有直接在项目中使用。然后,我手动检查INSTALLED_APPS并发现该raven模块仍在使用raw_post_data,这是原因,但是..

DeprecationWarning是否可以在试运行期间查看原因?如何使这些警告更详细?

4

2 回答 2

24

您可以通过命令行选项设置Python 警告控制-W,以引发异常,并在DeprecationWarning上进行回溯,例如错误,而不是一次普通的简单警告。任何特定警告都可以按消息、类别、模块、行或它们的组合进行过滤。

例子:

python -W error:"raw_post_data has been deprecated" manage.py test

python -W error::DeprecationWarning manage.py test

python -W error:::django.http.request manage.py test

如果您想通过批量编辑大型项目的许多文件来同时修复一种类型的所有警告,则精细过滤非常有用。


Python 2.7和更高版本通常会忽略 DeprecationWarning 如果它们没有被重新启用,例如通过-Wd选项或环境变量export PYTHONWARNINGS="d"。这在开发机器上可能很有用,但在生产机器上却没有。

于 2013-05-09T08:14:37.320 回答
5

这是取自一个类似的问题

您可以使用警告模块为DeprecationWarning.

暂时将以下代码段添加到项目的顶部urls.py

import warnings
warnings.simplefilter('error', DeprecationWarning)

现在DeprecationWarning将引发一个错误,因此如果debug=True您将获得熟悉的黄色 Django 错误页面以及完整的回溯。

于 2013-05-08T00:19:22.210 回答