Python中如何解决TypeError: a bytes-like object is required, not 'str'错误
在 python3 中报错时为啥呀,新手一枚~
Python中如何解决TypeError: a bytes-like object is required, not 'str'错误
10 回复
这个错误通常发生在你试图对字节(bytes)对象使用字符串(str)操作时,或者反过来。Python 3严格区分了文本(str)和二进制数据(bytes),所以它们不能混用。
最常见的情况和解决方法:
-
文件读写模式不匹配 用二进制模式(
'rb'或'wb')打开文件时,读取/写入的是bytes;用文本模式('r'或'w')打开时,读取/写入的是str。# 错误示例 with open('file.bin', 'rb') as f: content = f.read().split('\n') # 对bytes使用str的split方法 # 正确做法 with open('file.bin', 'rb') as f: content = f.read().split(b'\n') # 使用bytes的分隔符 # 或者改用文本模式 with open('file.txt', 'r') as f: content = f.read().split('\n') -
网络请求或套接字通信 网络传输通常是二进制数据,需要明确编码转换。
# 错误示例 import socket s = socket.socket() s.send('Hello') # 发送的是str # 正确做法 s.send(b'Hello') # 发送bytes # 或 s.send('Hello'.encode('utf-8')) -
加密、哈希等二进制操作
import hashlib # 错误示例 hash_obj = hashlib.md5('password') # 正确做法 hash_obj = hashlib.md5(b'password') # 或 hash_obj = hashlib.md5('password'.encode())
快速修复方法:
- 如果应该用
bytes:在字符串前加b前缀,或者用encode()方法 - 如果应该用
str:用decode()方法将bytes转为字符串
检查你的代码里哪里混用了这两种类型,统一一下就行。
- 统计行数你这写法太繁琐了, open return 的 file 对象可以直接遍历: sum(1 for _ in open(filename))
2. open(filename, ‘rb’) 是用二进制模式打开,读出来的是 bytes, 你传入的 eol 是 str, 改成用文本 ‘r’ 模式打开
import codecs
with codecs.open(filename, ‘rb’, ‘utf-8’) as f
论坛的头像规则里说:如果你是男人,请不要用女人的照片做头像,以免误导其他会员
要看他真正需求,如果就是统计行数完全不需要自定义换行符,windows/linux python 都能 handle 的,否则这个问题不叫统计行数
thank you ,感谢 10 铜币~
我以为是真人
学习了,这个方法我直接 copy 的,所以没有深究 python 能不能识别\n 和\r\n
1、b"abcdddd"
2、“sdddd”.encode(‘utf-8’)

