2013-10-10 5 views
-3

Почему «else» отмечена красным цветом, когда я пытаюсь запустить его? В нем говорится «недопустимый синтаксис».Что вызывает эту недопустимую синтаксическую ошибку в моем скрипте Python?

def interseccion(lista, lista2, resultado=[]): 
if lista != []: 
    if lista[0] in lista2: 
     return interseccion(lista[1:], lista2, resultado+[lista[0]] 
    else:     
     return interseccion(lista[1:], lista2, resultado] 

return resultado 
+3

Ваша открытая скобка - '(' не имеет закрывающей скобки ')' ... может быть, и другие проблемы. – davecom

+4

[Могучие аргументы по умолчанию могут вызвать проблемы.] (Http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument) –

+1

Кроме того, идея названия вопроса заключается в том, чтобы резюмируйте вопрос таким образом, который будет полезен другим людям, которые могут искать или искать ответ на тот же вопрос. «Почему я получаю эту ошибку? Im noobie» вряд ли будет. – DSM

ответ

2

Специфическая ошибка из-за недостающей закрывающей скобкой:

return interseccion(lista[1:], lista2, resultado+[lista[0]]) <-- that parenthesis is needed 
+0

И аналогичным образом во втором вызове 'interseccion()' (или, я полагаю, я должен написать 'interseccion (') - хотя есть разница, есть невнятная ']' там вместо ')'. –

+0

Большое вам спасибо, я должен быть более осторожным. – user2833752

+0

@JonathanLeffler вы правы, но вопрос конкретно спросил об ошибке, связанной с 'else'. – SheetJS

0

Вы должны закрыть скобки в обоих операторах возврата:

return interseccion(lista[1:], lista2, resultado+[lista[0]]) 

и

return interseccion(lista[1:], lista2, resultado) 

Также if lista != []: более идиоматично написано просто как if lista:.

И я не совсем уверен, если вы хотите, чтобы resultado был пустым списком по умолчанию! Возможно, значение по умолчанию должно быть None вместо, а затем вы можете указать:

if resultado is None: 
    resultado = [] 

в самом начале.

Смежные вопросы