2017-05-05 51 views
0

我还没有发现距离解决任何事情的情况是,如果你至少可以给我一个线索.. 我有这样的功能:忽略递归函数的Python 3.x的

def analizar_consulta(consulta, v): 
    print('\ntomar consulta: {}\n'.format(consulta)) 
    #transformar todas las variables en su contenido 
    consulta = transformar_variable(consulta, v) 
    if consulta[0] in diccionario_funciones.keys(): 
     parametros = list(filter(lambda x: not(isinstance(x,list)), consulta[1:])) 
     consultas = list(filter(lambda x: isinstance(x,list) , consulta[1:])) 
     print('parametros: {}'.format(parametros)) 
     print('consultas: {}\n'.format(consultas)) 
     if len(consultas) > 0: 
      pasadas = list(map(lambda x: analizar_consulta(x, v), consultas)) 
      parametros.append(pasadas) 
     else: 
      return diccionario_funciones[consulta[0]](*parametros) 
     return diccionario_funciones[consulta[0]](*parametros) 
    else: 
     raise Exception('Comando no encontrado') 

,因为它是递归的,有时它将第一个参数中的参数作为新实例中的一个新参数,但有时新参数的第一个参数是一个列表,这会在行5上产生错误(consulta[0]) 是否存在如果有一个列表(只包含数字),它只是返回它而不是继续其余的代码? 对不起,代码是西班牙文,如果你不明白的东西,我可以编辑它。

当我尝试它丝毫["comparar", ["PROM", "x"], ">", ["DESV", "y"]]这个参数,它会引发错误:TypeError: unhashable type: 'list'

+0

请修复您的缩进。 – blacksite

+2

而不是说“哪一个会引起第5行的错误”,你应该说出它引发了什么错误。理想地发布完整的错误追溯。 – Duncan

回答

1

从技术上来说,是的。在添加4.5行:

c0 = consulta[0] 
if isinstance(c0, list) and all(isinstance(i, int) for i in c0): 
    return 

话虽如此,但事实上,你不知道你的参数列表中包含表明,有一个在你的代码中的设计问题。您只需调用一个函数在列表中进行某种转换:

consulta = transformar_variable(consulta, v) 

您为什么不修复它?

考虑看看整体代码,并询问不同关于SO的问题:“我该怎么办(不管它是什么)?”