python - 将应用程序从 python2.7 移植到 python3.7 后的字节字符串问题
问题描述
我将我的应用程序从 Python 2.7 移植到 Python 3.7。移植后,我面临这个问题。我的字符串 'string is in bytes' 被转换为 b'string is in bytes'。我需要将此代码放在任何地方:
if (isinstance(secret_val, bytes)):
secret_val = secret_val.decode()
if (isinstance(response_data, str)):
response_data = str.encode(response_data)
我了解 python 3.7 中的字符串格式发生了变化。这可能是什么原因?
这是 Python 2.7 代码:
if isinstance(secret_val, bytes):
print("{0} is bytes", secret_val)
else:
print("{0} is not bytes", secret_val)
log.info('save_secret:: saving in vault: secret_val:: str ' + str(secret_val))
输出:
('{0} 是字节', 'VIjzLQfdLHQqF+LPPVDlj5uFA/ODFKfL9KQCfIufbRvAGXjS')
2019-08-05 08:38:30,351 - 34(uWSGIWorker5Core0) - 信息 - cred_service.save_secret(108) - save_secret:: 保存在保险库中:secret_val:: str VIjzLQfdLHQqF+LPPVDlj5uFA/ODFKfL9KQCfIufbRvAGXjS
注意:字节字符串看起来就像一个字符串
这是 Python 3.7 代码:
log.info('save_secret:: saving in vault: secret_val:: str ' + str(secret_val))
输出:
2019-08-05 07:36:14,324 - 39(b'uWSGIWorker5Core0') - 信息 - cred_service.save_secret(104) - save_secret:: 保存在保险库中:secret_val:: str b'U5OzxNNtnbOPBOMKBieVXU3DMMPGzFm8KensdSs+zOS+vh3R'
注意:字节字符串与 b'string' 一起出现
以下行在 Python 3.7 中失败,因为数据包含 secret_val 字节:
payload = json.dumps(data)
TypeError:字节类型的对象不是 JSON 可序列化的
为了摆脱这个错误,我需要做:
if isinstance(secret_val, bytes):
print("{0} is bytes", secret_val)
但是,同一行在 python 2.7 中工作正常,它还包含字节。
如何处理这种情况?
我的应用程序是一个凭证服务,它在许多值中包含字节字符串。
如果它的字节执行解码,我是否必须到处检查?
还有其他选择吗?
解决方案
推荐阅读
- c# - 如何让 Visual Studio 2019 引用磁盘上的本地 dll
- python - 如何处理 PCAP 文件以在 Python 中计算数据包统计信息。我不确定为此目的在此代码中添加什么
- powerquery - Power Query - 按列标题计算查找表中的项目数
- reactjs - 如何在 reactnative 中编写 if 语句和在 react 挂钩中编写 if 语句?
- download - 从 Jfrog 下载最新更新的工件
- reactjs - 如何从额外的减速器添加案例中更改另一个减速器的状态
- objective-c - 如何在 keyDown 函数中检查删除字符?
- python - 将数字分成 n 等份
- terminal - 如何压缩传输文件以在 Windows 中使用 Putty?
- c# - 如果输入 json 值整数,则在 .NET 核心 API 中请求模型 null