因此,在为我的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
那会将警告视为错误。