2016-09-20 136 views
-1

您好我是新来的蟒蛇,并试图实现一个递归函数,它填补了一个表,而是通过程序运行时,我得到以下异常递归if语句蟒蛇

不支持的操作类型为+:'NoneType'和'int'。

def cost(i, j): 
    if table[i][j] == None: 
     v1 = v2 = v3 = v4 = None 
     if i > 0 and j > 0: 
      print "case1" 
      v1 = cost(i-1, j-1) + getSubCostMatrixValue(options[string1[i]], options[string2[j]]) 
     if i > 0 and j >= 0: 
      print "case2" 
      v2 = cost(i-1, j) + gapCost 
     if i >= 0 and j > 0: 
      print "case3" 
      v3 = cost(i, j-1) + gapCost 
     if i == 0 and j == 0: 
      print "case4" 
      v4 = 0 
     print "Max:" 
     print max(v1,v2,v3,v4) 
     table[i][j] = max(v1,v2,v3,v4) 
     return table[i][j] 

问题ocours我的情况下2和3的情况下,仿佛递归调用莫名其妙失败,但我不能找出原因。我觉得这是明显的东西

表是从开始填充无,gabCost是一个int,getSubCostMatrixValue也返回一个int。

+0

修复您的缩进以及什么是'gapCost'? max()'如何写入? – depperm

+1

你不会在任何分支中返回任何东西。像'return v1' ...'return v2'等 –

+0

正确测试'None'是:'if table [i] [j] is None:'。这是因为'=='可能导致意外的评估为零或False。我怀疑这是你的问题的原因。 – cdarke

回答

0

显然,在某些情况下,您的cost()函数返回None。如果我理解正确,那么只有当我或j是负面时才会发生这种情况。由于这只发生在情况2或3中,在我看来,你的i或j确实是可以大于0但小于1的浮点数。情况可能如此吗?如果你提供了关于你的程序的更多细节,有人可能会有更详细的答案!