Windows+Python3.13环境下pyfakefs创建模拟文件夹失败,setUp正常但测试方法报错求助
Windows+Python3.13环境下pyfakefs创建模拟文件夹失败,setUp正常但测试方法报错求助
先给你拆解下问题:你遇到的AttributeError: 'WindowsPath' object has no attribute 'startswith',本质是pyfakefs在处理路径时,误把Path对象当成字符串来调用startswith方法了——但Python的WindowsPath对象本身并没有这个字符串方法,所以直接报错了。
结合你的环境(Python3.13+Windows)和代码表现,大概率是pyfakefs版本没跟上Python3.13的适配节奏(毕竟Python3.13刚发布不久),不过也有几个实用的解决方向,给你一步步说:
解决办法一:优先更新pyfakefs到最新版
先打开终端执行更新命令,新版pyfakefs通常会适配最新Python版本的路径处理逻辑:
pip install --upgrade pyfakefs
更新后再跑测试,大概率能直接解决这个问题。
解决办法二:手动把Path对象转成字符串
如果暂时没法更新,或者更新后还是有问题,可以在调用create_dir时,把Path路径转成字符串形式,避开pyfakefs对Path对象的兼容问题:
def test_top_folders_exist(self): # 将Path对象转为字符串后传入 self.fs.create_dir(str(Path.cwd() / "gdd"))
解决办法三:用pyfakefs自带的虚拟工作目录
你还可以直接使用pyfakefs模拟出来的当前工作目录,而不是调用系统的Path.cwd(),这样更贴合虚拟文件系统的逻辑,也能避免路径类型冲突:
def test_top_folders_exist(self): # 使用fake fs提供的虚拟cwd self.fs.create_dir(self.fs.getcwd() / "gdd")
另外提个小建议:你的setUp方法里可以直接用cls.fs代替cls.fake_fs(),写法更简洁,同时也建议把路径转成字符串,避免后续再踩同样的坑:
@classmethod def setUp(cls): cls.setUpClassPyfakefs() cls.fs.create_dir(str(Path.cwd() / "gamedev_eco")) cls.fs.cwd = str(Path.cwd() / "gamedev_eco")
你可以先试更新版本的方法,这是最根本的解决方案,如果还不行再试试后面的临时办法~
备注:内容来源于stack exchange,提问作者wavesinaroom
相关产品推荐
相关产品推荐

