2

我正在使用 Python 和 Zookeeper,因为我在 Python 中使用 kazoo 库。这个问题与 Zookeeper 或 kazoo 库无关。我想这主要与Python有关。

以下是我的两个变量 -

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)

现在我需要使用这两个变量来创建一个字节 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 字符串。

这是有关kazoo 库的详细信息

更新:-

如果我使用这种语法,那么它工作正常 -

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 回答