Python编码后调用replace报TypeError需bytes-like对象问题求助
报错原因
触发TypeError: a bytes-like object is required, not 'str'的核心原因是Python3中str类型和bytes类型严格区分,不支持直接混用操作:
- 执行
string = string.encode("unicode_escape")之后,string变量已经从普通Unicode字符串转为字节(bytes)对象 - 后续调用
.replace()方法时,传入的待替换内容、替换目标都是普通字符串(str类型),而字节对象的replace方法仅接受bytes类型参数,因此直接抛出类型错误。
修复方案
两种实现方式二选一即可:
方案1:替换操作传入bytes类型参数
给replace方法的两个参数加上b前缀,标记为字节对象:
string = ' frame #0: [03m0x00067[0m embedded`excenerate_trap at [36mcpptions.c[0m]:[36m398[0m]:[33m3[0m [anu]!' # 打印原始字符串 print('The string is:', string) # utf-8编码 print('The encoded version (with ignore) is:', string.encode('utf-8')) # unicode_escape编码 string = string.encode("unicode_escape") print('The encoded version (with replace) is:', string) # 替换参数改为bytes类型 string = string.replace(b"'\\0", b"'\\x00") print("\n", string , "\n")
方案2:编码后先解码回str再做替换
如果后续需要处理普通文本字符串,编码后先解码为str类型,再执行替换操作即可:
string = ' frame #0: [03m0x00067[0m embedded`excenerate_trap at [36mcpptions.c[0m]:[36m398[0m]:[33m3[0m [anu]!' # 打印原始字符串 print('The string is:', string) # utf-8编码 print('The encoded version (with ignore) is:', string.encode('utf-8')) # unicode_escape编码后解码回普通字符串 string = string.encode("unicode_escape").decode("utf-8") print('The encoded version (with replace) is:', string) # 此时string为str类型,直接传入str参数替换 string = string.replace("'\\0", "'\\x00") print("\n", string , "\n")
补充说明
你代码里注释标注的是with replace错误处理策略,但实际调用的是unicode_escape编码,并没有指定错误处理规则。如果需要编码遇到非法字符时自动替换,正确写法是string.encode('utf-8', errors='replace')。
内容的提问来源于stack exchange,提问作者Anushka
相关产品推荐
相关产品推荐

