os.path.exists()在Windows报错,PyCharm与Ubuntu环境下运行正常
解决Windows下代码运行异常的问题
嘿,我大概率能猜到你这问题出在哪——毕竟Windows和Linux的文件系统逻辑差异不小,咱们一步步拆解排查:
1. 先把路径改成跨平台兼容的写法
你代码里直接写了'config/config.ini',Linux下斜杠/没问题,但Windows默认认反斜杠\,虽然Python的os.path能兼容,但用os.path.join拼接路径才是最稳妥的跨平台写法:
config_dir = 'config' config_file_path = os.path.join(config_dir, 'config.ini')
之后把代码里所有硬写的'config/config.ini'都换成这个变量,就能避免路径识别的坑。
2. 修复文件存在性检查的逻辑漏洞
你现在的检查逻辑是先看config目录存在,直接就读里面的config.ini,但这里有两个隐患:
- 如果
config不是目录(比如误创建了同名文件),os.stat读取时直接报错; os.makedirs默认在目录已存在时会抛FileExistsError,Windows下这个报错会直接终止程序。
改成下面的写法更稳妥:
config_dir = 'config' config_file = os.path.join(config_dir, 'config.ini') # 直接检查配置文件是否是有效文件且非空 if os.path.isfile(config_file) and os.stat(config_file).st_size > 0: # 执行你的业务逻辑 else: # exist_ok=True:目录已存在时不报错,跨平台通用 os.makedirs(config_dir, exist_ok=True) password = input("Password: ") ip = input("IP Server: ") clientname = input("(choosen) Clientname: ") config = configparser.ConfigParser() # 注意:你这里用了user变量,但代码里没定义,是不是应该换成clientname? config['DEFAULT'] = {'User': clientname, 'ServerIP': ip, ...} # 别忘了把配置写入文件! with open(config_file, 'w') as f: config.write(f)
另外提醒下,你代码片段里的user变量没看到定义,这很可能是个笔误,Windows下运行会直接抛NameError,记得修正哦。
3. 排查Windows的权限问题
如果你的程序放在Windows受保护的目录(比如C:\Program Files)下运行,可能会没有创建目录或写入文件的权限。建议把程序移到用户目录(比如桌面、Documents文件夹),或者右键以管理员身份启动PyCharm/命令提示符试试。
4. 加个异常捕获看具体错误
要是还没解决,就在代码外层加个异常捕获,这样能看到Windows下到底是哪一步出错:
try: # 把你的所有代码放在这里 except Exception as e: print(f"具体错误信息:{e}")
有了具体错误提示,定位问题就快多了。
内容的提问来源于stack exchange,提问作者KingRazer
相关产品推荐
相关产品推荐

