我的这个功能与python2
完美配合 def writeCache(env, cache):
with env.begin(write=True) as txn:
for k, v in cache.items():
txn.put(k, v)
但是当我用python3.5.2
执行它时,它会返回以下错误:
txn.put(k, v)
TypeError: Won't implicitly convert Unicode to bytes; use .encode()
首先尝试解决这个问题:
def writeCache(env, cache):
with env.begin(write=True) as txn:
for k, v in cache.items():
k.encode()
有效,但不包括变量v。
def writeCache(env, cache):
with env.begin(write=True) as txn:
for k, v in cache.items():
k.encode()
v.encode()
我得到以下内容:
AttributeError: 'bytes' object has no attribute 'encode'
与v.encode()
答案 0 :(得分:3)
txn.put(str(k).encode(), str(v).encode())
对我有用的
答案 1 :(得分:0)
你并没有真正提供大量信息,但这是我最好的猜测:
for k, v in cache.items():
txn.put(k.encode(), v)
从标题中的TypeError判断,txn.put()
方法希望有字节,但至少有一个参数是(unicode)字符串。
v
显然已经是一个字节对象(因此是AttributeError),因此不再需要对其进行编码。
但是如果k.encode()
有效,则很可能是违规(unicode)字符串,编码它应该可以解决问题。
请注意,str.encode()
默认使用'utf-8'
。
目前尚不清楚Python 2中是否使用相同的默认值,其中转换是隐式完成的。
我想这取决于您使用的库(txn.put()
来自的库)。