因此,在为我的Django项目运行测试时,我得到以下输出:

WARNING 2013-04-25 17:55:29,977 18482 29789392 py.warnings:3 <module>() /home/sean/dev/project/testenv/local/lib/python2.7/site-packages/django/conf/urls/defaults.py:3: DeprecationWarning: django.conf.urls.defaults is deprecated; use django.conf.urls instead
  DeprecationWarning)

WARNING 2013-04-25 17:55:29,986 18482 29789392 py.warnings:10 <module>() /home/sean/dev/project/testenv/local/lib/python2.7/site-packages/django/utils/copycompat.py:10: DeprecationWarning: django.utils.copycompat is deprecated; use the native copy module instead
  DeprecationWarning)


我想弄清楚这些源于何处,或源自哪些依存关系。

http://docs.python.org/2/library/warnings.html

据此,我可以执行以下操作以使Warnings被抛出为Exception并获得回溯:

在我的manage.py顶部,在调用任何其他代码之前:

import warnings
warnings.filterwarnings(
        'error', r".*",
        Warning, r'.*')


这将导致“ PendingDeprecationWarning:django.utils.simplejson已过时;请改用json。”被抛出,所以我用了:

import warnings
warnings.filterwarnings(
        'error', r".*",
        Warning, r'.*')
warnings.filterwarnings(
        'ignore', r".*",
        Warning, r'django\.utils\.simplejson')


但是它仍然在打印以前的DeprecationWarnings,而不是像预期的那样引发错误。

编辑:
另外,我尝试将print和pdb语句放在warnings.warn_explicit()的开头,该位置发生了过滤器逻辑,但它们从未被调用。

最佳答案

您可以使用-W error选项运行测试或本地django服务器:

$ python -W error manage.py runserver


要么

$ python -W error manage.py test


那会将警告视为错误。

10-08 13:36