Win10运行Python MadLib生成器报WinError 3找不到文件问题求助
问题原因及解决方案
1. WinError 3路径不存在的原因
./不是Linux专属语法,Windows系统也完全支持该相对路径写法,报错和这个语法无关- 第一个核心错误是大小写不匹配:你定义的类属性是大写的
Path = "./MadLibGen",但后续调用时全部用了小写的cls.path/CreateaMadLib.path,Python对大小写敏感,根本取不到正确的路径值,自然会报路径不存在 - 第二个常见问题是相对路径的基准问题:
./对应的是你执行Python脚本时的命令行工作目录,不是脚本文件本身所在的目录,如果运行脚本时的工作目录和脚本存放目录不一致,也会找不到目标文件夹
2. 替换为绝对路径后出现空白屏的原因
- 你的核心业务逻辑代码(从
Temp_Name = Choose_A_MadLib_Temp()开始的几行)写在了Choose_A_MadLib_Temp函数的return Temp语句之后,return会直接结束函数运行,后面的代码永远不会被执行,程序启动后没有任何输出自然就是空白屏
3. 其他需要修正的代码错误
Choose_A_MadLib_Temp是类内部的无参方法,没有加@staticmethod装饰器,直接调用会报错Build__A__Story方法定义时要求传入Word参数,但实际调用时没有传值,会触发参数缺失错误Display_A_MadLib_Story方法里print(Story)的Story没有加self前缀,找不到变量会报错Build__A__Story方法里的Word参数你全程没用到,可以直接删掉
修正后可运行的参考代码
import random import json import os class CreateaMadLib: Path = "./MadLibGen" def __init__(self, Word_Desc, Temp): self.Temp = Temp self.Word_Desc = Word_Desc self.UserInput = [] self.Story = None @classmethod def Get__From__Json(cls, Name, Path=None): if not Path: Path = cls.Path fpath = os.path.join(Path, Name) with open(fpath, "r", encoding="utf-8") as F: Data = json.load(F) Create_a_MadLib = cls(**Data) return Create_a_MadLib def Get__The__Words__From__TheUser(self): print("Please enter the words that you want: ") for desc in self.Word_Desc: UI = input(desc + " ") self.UserInput.append(UI) return self.UserInput def Build__A__Story(self): self.Story = self.Temp.format(*self.UserInput) return self.Story def Display_A_MadLib_Story(self): print(self.Story) @staticmethod def Choose_A_MadLib_Temp(): print("Please choose the Mad Lib that you want from the list:") MadLibGen = os.listdir(CreateaMadLib.Path) Temp = input(str(MadLibGen) + " ") return Temp # 主逻辑移到函数外部 if __name__ == "__main__": Temp_Name = CreateaMadLib.Choose_A_MadLib_Temp() #Temp_Name = "ArcadeMadLib.json" Create_a_MadLib = CreateaMadLib.Get__From__Json(Temp_Name) Word = Create_a_MadLib.Get__The__Words__From__TheUser() Story = Create_a_MadLib.Build__A__Story() Create_a_MadLib.Display_A_MadLib_Story()
如果还是想用绝对路径,直接把Path = "./MadLibGen"改成你对应的绝对路径即可,路径分隔符用/或者\\Windows都可以正常识别。
内容的提问来源于stack exchange,提问作者CodingStudent
相关产品推荐
相关产品推荐

