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),所以它们不能混用。

最常见的情况和解决方法:

  1. 文件读写模式不匹配 用二进制模式('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')
    
  2. 网络请求或套接字通信 网络传输通常是二进制数据,需要明确编码转换。

    # 错误示例
    import socket
    s = socket.socket()
    s.send('Hello')  # 发送的是str
    
    # 正确做法
    s.send(b'Hello')  # 发送bytes
    # 或
    s.send('Hello'.encode('utf-8'))
    
  3. 加密、哈希等二进制操作

    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转为字符串

检查你的代码里哪里混用了这两种类型,统一一下就行。

  1. 统计行数你这写法太繁琐了, 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’)

回到顶部