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

为何Python程序在Visual Studio Code中仅能非调试运行?

解决VS Code中Python调试模式下找不到文件的问题

问题根因

调试模式与非调试模式的工作目录不一致:

  • 非调试运行(比如右键"Run Python File in Terminal")时,VS Code会自动将终端工作目录切换到脚本所在文件夹,相对路径能正确找到文件。
  • 调试模式默认使用你在VS Code中打开的工作区根目录作为工作目录,而非脚本所在文件夹,导致相对路径指向的位置错误,触发FileNotFoundError。

解决方案

方案1:修改调试配置(launch.json),指定工作目录

通过配置调试环境,强制调试时的工作目录为当前脚本所在文件夹:

  1. 打开VS Code调试面板,点击"创建launch.json文件",选择Python环境。
  2. 在生成的配置中添加"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:33:36