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

如何解决pdoc报错AttributeError: '_io.StringIO'无buffer属性?

问题修复方案

问题原因

函数默认参数在定义阶段就会求值sys.stdout.buffer,但pdoc运行时可能将标准输出替换为文本流(如_io.StringIO),这类文本流没有buffer属性,因此触发AttributeError。

修复方案一:延迟获取默认流

将默认参数设为None,在函数内部再获取sys.stdout.buffer,避免定义阶段的求值问题:

import sys
from typing import IO, Optional

def write(s: str, stream: Optional[IO[bytes]] = None):
    if stream is None:
        stream = sys.stdout.buffer
    stream.write(s.encode())
    stream.flush()

修复方案二:兼容文本流与字节流

如果需要同时支持文本流和字节流输入,可以添加类型判断,分别处理字符串写入逻辑:

import sys
from typing import IO, Union

def write(s: str, stream: Union[IO[str], IO[bytes]] = sys.stdout):
    if isinstance(stream, IO[bytes]):
        stream.write(s.encode())
    else:
        stream.write(s)
    stream.flush()

这个方案更灵活,用户传入文本流(如StringIO)或字节流都能正常工作,同时避免了buffer属性的访问问题。

内容的提问来源于stack exchange,提问作者browser-bug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:32:34