2015-06-09 51 views
-1

目前我的Twitch聊天機器人有問題,當機器人拿起JTV發送一個標誌給通道中的某個人時發生這個錯誤(給他們mod權限)。Python AttributeError:'str'對象沒有屬性'append'(具體)

我遇到的問題是這個錯誤有時會發生,有時不會。由於這個原因,我不能在我的VPS上運行穩定的進程。任何幫助?

message = ' '.join(line) 
x = re.findall('^:jtv MODE (.*?) \+o (.*)$', message) # Find the message 
if (len(x) > 0): 
    channel = x[0][0] 
    if (channel not in mods): # If the channel isn't already in the list 
     mods[channel] = [] 
    list = mods.get(channel) 
    list.append(x[0][1]) 
    print(mods) # Print updated list with new mods 

這裏是我去掉它們的地方,不確定這是否會導致錯誤。但我會後它仍然...

# Removing mods 
y = re.findall('^:jtv MODE (.*?) \-o (.*)$', message) 
if (len(y) > 0): 
    channel = y[0][0] 
    if (channel in mods): 
     mods.get(channel).remove(y[0][1]) 
     print(mods) 
+1

,則不應使用'list'作爲變量名。這是內置類型名稱之一。 –

+2

1.'list'不是一個好名字,因爲它掩蓋了內建函數'list()'。 2.在某個點或其他地方,該「list」不是「list」,而是「str」。因爲它來自'mods.get(channel)',那麼其結果有時是'str',可能是因爲'channel'在'mods'中,而'mods [channel]'沒有被賦予一個空的' list'。 3.管道膠帶的修復是將append()放入一個'try..except'中,看看是否改善了這種情況。 – TigerhawkT3

+0

@PaulRooney你推薦我用什麼?該計劃從多個渠道中獲取聊天,我希望從他們每個人那裏獲得一個mod的列表。 – Lynn

回答

2

從我可以看到這裏的「列表」 list.append(x[0][1])有時必須是一個字符串,而不是一個列表。所以mods.get(channel)可能有時會返回一個字符串。一種解決辦法可能是檢查你這次是否得到了一個字符串,type(list) == str並且不要做追加。不幸的是,我只能告訴你。也許看看mods.get(),看看它爲什麼會這樣做。

+0

看起來像解決了這個錯誤。我不得不修改刪除mods,因爲它會觸發與'.remove'相同的錯誤。 – Lynn

1

首先,請致電list,如my_list。其次,只要channel不在mods中,則mods[channel]將不會被分配新的list。它說這是一個str的事實意味着你將一個字符串分配到代碼中的某處。你應該仔細研究一下。但是你可以嘗試通過請求原諒,而不是許可迴避一切:

try: 
    my_list.append(x[0][1]) 
except AttributeError: 
    pass # ideally, you shouldn't let errors pass silently 

另外,代替if (len(x) > 0):,你可以做if x:。給x一個更具描述性的變量名稱,如message或其他內容。

0

您應該使用日誌記錄來調試您的代碼。發生該問題後,您可以檢查日誌並瞭解發生了什麼。

順便說一句,不要使用list作爲變量名稱。這很混亂。

例如:

 
import logging 

try: 
    list.append(x[0][1]) 
except: 
    logging.error(type(x)) 
    logging.error(x) 
相關問題