我正在研究一个 Django 项目,但我认为这是一个纯 Pythonunittest
问题。
通常,当您运行测试时,异常将被测试运行程序捕获并进行相应处理。
出于调试目的,我想禁用此行为,即:
python -i manage.py test
将像往常一样在异常时进入交互式 Python shell。
怎么做?
编辑:根据到目前为止的答案,这似乎比我意识到的更像是一个特定于 Django 的问题!
我正在研究一个 Django 项目,但我认为这是一个纯 Pythonunittest
问题。
通常,当您运行测试时,异常将被测试运行程序捕获并进行相应处理。
出于调试目的,我想禁用此行为,即:
python -i manage.py test
将像往常一样在异常时进入交互式 Python shell。
怎么做?
编辑:根据到目前为止的答案,这似乎比我意识到的更像是一个特定于 Django 的问题!
您可以使用django-nose测试运行程序,它适用于unittest
测试,并运行您的测试,如python manage.py test -v2 --pdb
. 鼻子会为你运行pdb。
一个新的应用程序django-pdb使它变得更好,支持在常规代码中打破测试失败或未捕获异常的模式。
你可以在你的包中的一个模块中尝试这样的事情,然后在你的代码中使用CondCatches(
你的异常:)
# System Imports
import os
class NoSuchException(Exception):
""" Null Exception will not match any exception."""
pass
def CondCatches(conditional, *args):
"""
Depending on conditional either returns the arguments or NoSuchException.
Use this to check have a caught exception that is suppressed some of the
time. e.g.:
from DisableableExcept import CondCatches
import os
try:
# Something like:
print "Do something bad!"
print 23/0
except CondCatches(os.getenv('DEBUG'), Exception), e:
#handle the exception in non DEBUG
print 'Somthing has a problem!', e
"""
if conditional:
return (NoSuchException, )
else:
return args
if __name__ == '__main__':
# Do SOMETHING if file is called on it's own.
try:
print 'To Suppress Catching this exception set DEBUG=anything'
print 1 / 0
except CondCatches(os.getenv('DEBUG'), ValueError, ZeroDivisionError), e:
print "Caught Exception", e