2015-09-28 5 views
2

Работа с программой python, которая берет вводные инструкции из текстового файла и записывает их в словарь в списке. Моя ошибка возникает, когда я пытаюсь запустить функцию or_inst:ТипError: объект 'str' не поддерживает назначение объекта

def or_inst(contextStack, varName, arg1, arg2): 
    checkExists(contextStack, arg1) 
    checkExists(contextStack, arg2) 
    for context in contextStack: 
    if (lookup(contextStack, arg1) == 't' or lookup(contextStack, arg2) == 't'): 
     assignValue(context, varName, 't') 
    else: 
     assignValue(context, varName, 'f') 

где contextStack список с контекстом словаря инструкции входных сигналов:

или мазок

и contextStack является:

('c': 'f', 'b': 'f', 'a': 't')

assignValue is:

def assignValue(contextStack, varName, value): 
    print(contextStack, varName, value) 
    for context in contextStack: 
    context[varName] = value 

Я думаю, что ошибка связана с использованием строки 't' в позиции значения (по крайней мере, из того, что я уже искал). Какие у меня есть другие варианты?

+0

contextStack список, содержащий словарь «контекст». contextStack выглядит как [{'c': 'f', 'b': 'f', 'a': 't'}] во время ошибки –

+0

Что вы пытаетесь сделать с 'assignValue'? –

+0

lookup проверяет dict в контекстеStack, чтобы найти ключ dict и вернуть значение. например: в 'или da b', lookup (contextStack, arg1) находит 'a' в dict и возвращает значение 't' –

ответ

0

Если contextStack в assignValue действительно словарь, а затем, когда вы цикл над ним с помощью -

for context in contextStack: 

context бы ключ в словаре (который я думаю, это строка из вашей ошибки), вы не можете сделать context[varName] = value.

Если вы стремитесь, чтобы изменить (или добавить) значение для varnName ключа в contextStack словаря value, то вы должны просто использовать -

def assignValue(contextStack, varName, value): 
    print(contextStack, varName, value) 
    contextStack[varName] = value 
+0

, когда я запускаю assignValue, как это, я получаю ошибку, что индексы списка должны быть int not str –

+0

Вы уверены, что вы didn; t также измените строку - 'assignValue (context, varName, 't')' to 'assignValue (contextStack , varName, 't') '? Если да, не делайте этого. –

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