pet*_*erw 1 python testing django recursion
在Django模型上,我有一个递归函数。现在有一种情况,如果我有3个使用循环引用设置的模型,我的递归函数将不会停止!我要进行的测试将如下所示:
old_recursion_limit = sys.getrecursionlimit()
sys.setrecursionlimit(3) # I know that if I go more than 3 recursive levels deep, my code has failed
try:
obj.recusive_fn()
except RuntimeError, e:
print e # here I am hoping the only runtime error I will encounter is maximum recursion depth reached
sys.setrecursionlimit(oldlimit)
Run Code Online (Sandbox Code Playgroud)
现在,运行时错误并未在我的try / catch块中捕获,而是使测试运行程序崩溃。有任何想法吗?
我通常要做的是创建一个depth参数,默认为0,每次增加1。如果我超过该深度,则可以提出异常或以某种方式处理它。
def recursion(parent, depth=0):
if depth > 3: # whatever depth you don't want to exceed
parent.append('leaf!')
return # or raise an exception
lst = []
for i in range(5):
recursion(lst, depth+1)
parent.append(lst)
print recursion([])
Run Code Online (Sandbox Code Playgroud)
请注意,此答案独立于Django;以及如何在一般Python中做到这一点。