You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何raw为bytes类型,用print写入wb模式文件仍抛出TypeError?

问题原因及解决方案

核心原因

问题出在print()函数的默认行为上:

  • 当你把bytes对象传给print()并指定输出到二进制模式打开的文件时,print()会先把bytes对象转换成字符串形式(比如b'Some text, dude!'这种带b前缀的字符串),然后尝试把这个字符串写入二进制文件。
  • 但二进制模式的文件只接受bytes类型的数据,不接受字符串,所以直接触发TypeError。

哪怕你用raw = bytes(txt.encode('ascii')),得到的还是bytes对象,print()依然会执行上述转换步骤,所以错误不会消失。

解决办法

直接用文件对象的write()方法写入字节数据,跳过print()的字符串转换:

txt = 'Some text, dude!'
with open('to_load', mode='wb') as f:
    raw = txt.encode('ascii')
    f.write(raw)

额外说明

print()是为文本输出设计的,它会自动给内容加换行符,还会对所有传入的对象调用str()做转换。而二进制文件需要的是原始字节数据,不需要这些额外处理,所以write()才是正确的选择。

内容的提问来源于stack exchange,提问作者rudicangiotti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:05:27