2016-07-03 58 views
0

我試圖讓我的代碼使用json在txt文件中存儲消息。每次有新消息進入時,它都會將新消息添加到陣列中。Python:不能將'tuple'對象隱式轉換爲str

結構將是

{ 
    "Messages": { 
    "Test Contact 2": { 
     "0": "\"Message 1" 
    }, 
    "Test Contact 1": { 
     "0": "\"Message 1\"", 
     "1": "\"Message 2\"" 
    } 
    } 
} 

這裏是我當前的代碼

class PluginOne(IPlugin): 
    def process(self): 
     try: 
      print("Database") 
      data_store('Test contact', 'Text Message') 
      pass 
     except Exception as exc: 
      print("Error in database: " + exc.args) 


def data_store(key_id, key_info): 
    try: 
     with open('Plugins/Database/messages.txt', 'r+') as f: 
      data = json.load(f) 
      data[key_id] = key_info 
      f.seek(0) 
      json.dump(data, f) 
      f.truncate() 
     pass 
    except Exception as exc: 
     print("Error in data store: " + exc.args) 

當我嘗試運行代碼,我收到以下錯誤

Can't convert 'tuple' object to str implicitly 

我我在網上看起來還在掙扎,我敢肯定這是一個簡單的答案,但由於我對Python相當陌生,所以我無法確定出來。

在先進的感謝

回答

1

在異常處理程序,您要添加exc.args爲字符串。 args屬性is a tuple,不能隱式轉換爲字符串。你可以...

# print it seperately 
    print("Error in data store") 
    print(exc.args) 

    # or alternatively 
    print("Error in data store: " + str(exc.args)) 

    # or alternatively 
    print("Error in data store: " + str(exc)) 

但是,這是在異常處理的一個問題,這個問題的根源是別的東西,而當前異常處理程序是不是在處理它是偉大的:

  • 沒有你的異常處理程序,Python會顯示異常的根本原因的完整回溯,並停止你的程序。
  • 您的異常處理程序,只有您的消息打印和程序繼續。這可能不是你想要的。

這可能會更好,只有catch你知道你可以從中恢復的具體例外。

+0

您不能連接字符串和列表。你應該找到一些方法來代替你想從'exc.args'得到的數據。 – sidney

+0

爲什麼要將它轉換爲列表幫助?列表也不是字符串。 – khelwood

+0

你是對的。我已經解決了我的答案。 –

相關問題