2

Python で kazoo ライブラリを使用しているため、Python と Zookeeper を使用しています。この質問は、Zookeeper や kazoo ライブラリに関するものではありません。これは主にPythonに関連していると思います。

以下は私の2つの変数です-

new_error_str = "Error occurred on machine %s in datacenter %s on the %s of process %s" % (host_info, local_dc, step, process_name)
new_error_key = "error_%s" % (timestamp_in_ms)

次に、これら 2 つの変数を使用してバイト json 文字列を作成し、その json 文字列をデータとして Zookeeper ノードに書き込む必要があるため、ノードを作成してデータを書き込む構文を以下に示します。

zk.create(date_znode_path, b'{"'+new_error_key+'":"' + new_error_str + '"}', None, True)

どういうわけか、上記の行は次のように例外をスローします-

TypeError: value must be a byte string

私がここで何を間違っていると思いますか?上記の変数の JSON 文字列を作成しようとしています。

カズーライブラリの詳細はこちら

アップデート:-

この構文を使用すると、正常に動作します-

b'{"hostname":"' + get_hostname() + '"}', None, True)

私はこのようなデータを見ることができます -

{"hostname":"machineA"}
4

1 に答える 1

2

json モジュールを使用する必要があります。

import json
zk.create(date_znode_path, json.dumps({new_error_key : new_error_str}, ensure_ascii=True), None, True)

手動で json を作成するのは難しいです。入力に引用符が含まれている場合はどうなるでしょうか? すべてを回避でき、すべてのエッジ ケースに対して十分にテストされたツールを使用することを常にお勧めします。

于 2014-03-28T06:22:07.937 に答える