为何Python程序在Visual Studio Code中仅能非调试运行?
解决VS Code中Python调试模式下找不到文件的问题
问题根因
调试模式与非调试模式的工作目录不一致:
- 非调试运行(比如右键"Run Python File in Terminal")时,VS Code会自动将终端工作目录切换到脚本所在文件夹,相对路径能正确找到文件。
- 调试模式默认使用你在VS Code中打开的工作区根目录作为工作目录,而非脚本所在文件夹,导致相对路径指向的位置错误,触发
FileNotFoundError。
解决方案
方案1:修改调试配置(launch.json),指定工作目录
通过配置调试环境,强制调试时的工作目录为当前脚本所在文件夹:
- 打开VS Code调试面板,点击"创建launch.json文件",选择Python环境。
- 在生成的配置中添加
"cwd": "${fileDirname}",示例配置如下:
{ "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "cwd": "${fileDirname}" // 关键配置:将工作目录设为当前脚本所在文件夹 } ] }
方案2:代码中动态获取文件路径(更健壮)
通过os模块获取脚本绝对路径,再拼接目标文件路径,彻底摆脱工作目录限制:
import os # 获取当前脚本所在文件夹的绝对路径 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接输入、输出文件的完整路径 input_file_path = os.path.join(script_dir, "piratein.txt") output_file_path = os.path.join(script_dir, "pirateout.txt") # 用with语句操作文件,自动关闭资源更安全 with open(input_file_path, 'r') as input_file: distances = input_file.readlines() # 读取数据时去除换行符,避免转换整数出错 l = int(distances[0].strip()) x = int(distances[1].strip()) y = int(distances[2].strip()) if x + y < l: write_content = str(x + y) elif x + y > l: write_content = str((l - x) + (l - y)) else: # 补充x+y等于l的情况,避免变量未定义报错 write_content = str(l) with open(output_file_path, 'w') as output_file: output_file.write(write_content)
方案3:临时切换工作目录(快捷但不持久)
在VS Code终端中先切换到脚本所在文件夹,再启动调试:
cd \\CODING\\VisualStudioCode\\Informatics Olympiad\\AIO_PRACTICE
此方法仅对当前终端会话生效,重启后需重复操作。
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

