2016-07-03 2 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

あなたはどちらも正しいです。私は私の答えを修正しました。 –

関連する問題