2015-09-28 68 views
2

使用從一個文本文件獲取輸入指令並將它們寫入列表中的字典的python程序。 我的錯誤是當我試圖運行一個or_inst功能:TypeError:'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是字典上下文從列表中 輸入指令是:

或DAB

和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檢查contextStack中的詞典以查找他認爲的詞典關鍵詞和歸屬詞。例如:在'或da b'中,lookup(contextStack,arg1)在dict中找到'a'並返回值't' –

回答

0

如果contextStackassignValue真的是一本字典,那麼當你遍歷它使用 -

for context in contextStack: 

context將在字典中的鍵(我的猜測是一個字符串,從你的錯誤),你不能做context[varName] = value

如果你的目標是在contextStack字典改變(或增加)的值varnName關鍵value,那麼你只需要使用 -

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

當我運行assignValue這樣的,我得到的錯誤,列表索引必須是int不是str –

+0

你確定你didn; t也改變線 - 'assignValue(上下文,varName,'t')''assignValue(contextStack ,varName,'t')'?如果你這樣做,不要這樣做。 –