如何解决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
相关产品推荐
相关产品推荐

