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

从脚本目录/当前目录运行Python脚本时os.chdir报错WinError 123如何解决?

问题根本原因
  • 报错的核心是os.path.dirname(sys.argv[0])返回了空字符串'',向os.chdir()传入空路径触发了WinError 123语法错误。
  • 触发场景:你在脚本所在的当前目录直接执行脚本,比如运行命令python install_uwp.py,此时sys.argv[0]的值只有纯文件名没有前置路径,os.path.dirname()处理纯文件名时默认返回空字符串。
  • 旧脚本运行正常是因为此前的调用场景都带路径前缀(比如从其他目录调用python .\tools\old_script.py或者直接传完整路径执行),sys.argv[0]带路径信息所以可以正常提取目录。
排查方法

在切换工作目录的代码前添加调试打印,确认参数实际值:

print(f"sys.argv[0] = {repr(sys.argv[0])}, 提取到的目录 = {repr(os.path.dirname(sys.argv[0]))}")

运行脚本后即可直观验证是不是目录提取结果为空。

修复方案

不要依赖sys.argv[0]的路径信息,改用稳定性更高的方式获取脚本所在目录:

方案1(常规Python运行场景,兼容Python 3.4+)

import os
import sys

# 从内置变量__file__获取当前脚本的绝对路径,再提取目录
script_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_dir)

__file__是Python内置的固定变量,始终存储当前脚本的完整路径,不受调用方式影响。

方案2(兼容打包为exe的场景)

如果你后续会用PyInstaller等工具把脚本打包为单文件exe,用以下兼容写法:

import os
import sys

if getattr(sys, 'frozen', False):
    # 打包后的运行环境,取exe所在目录
    script_dir = os.path.dirname(sys.executable)
else:
    # 普通Python脚本运行环境
    script_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(script_dir)

内容的提问来源于stack exchange,提问作者MC874

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:36:03