首页 > 解决方案 > 将应用程序从 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 中工作正常,它还包含字节。

如何处理这种情况?

我的应用程序是一个凭证服务,它在许多值中包含字节字符串。

如果它的字节执行解码,我是否必须到处检查?

还有其他选择吗?

标签: pythonpython-3.xporting

解决方案


推荐阅读