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

VS Code中Python加载.env多行字符串环境变量失败问题排查

解决VS Code中.env多行JSON环境变量加载失败的问题

问题复现

通过environs库加载.env文件中多行字符串形式的JSON环境变量时,命令行运行正常,但在VS Code中触发JSONDecodeError。

核心代码:

from environs import Env
from os import getenv
from typing import Dict
import sys
import json

env: Env = Env()
env_file: str | None = getenv("ENV_FILE")
if not env_file:
    print("You need to start this script with ENV_FILE variable!")
    sys.exit(1)
else:
    env.read_env(path=env_file)

_server_data = env.str("SERVER_DATA")
SERVER_DATA: Dict = json.loads(_server_data)
if not SERVER_DATA:
    raise ValueError("empty SERVER_DATA")
for item in SERVER_DATA:
    print(f'{item} : {SERVER_DATA[item]}')

.env文件内容:

SERVER_DATA = '{"test_server": "server",
                "test_server2": "server2"}'

命令行运行可正常输出,但VS Code中抛出异常:

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

原因分析

命令行的shell(如bash)会自动解析引号包裹的多行内容,将换行和缩进合并为合法的单行JSON字符串;但VS Code的环境加载机制(或environs在该环境下的处理逻辑)不会自动处理这些换行和多余缩进,导致读取到的_server_data包含换行符和大量无效空格,不符合JSON语法规范,最终触发解析错误。

解决方案

方案1:修改.env文件,用反斜杠转义换行

在.env中用反斜杠将多行内容连接为逻辑单行,确保读取到的字符串无多余换行:

SERVER_DATA='{"test_server": "server", \
              "test_server2": "server2"}'

方案2:代码中预处理字符串,清理换行和多余空格

在json.loads之前,对读取到的字符串进行清理,去掉换行和多余缩进:

_server_data = env.str("SERVER_DATA")
# 移除所有换行符,并去除每行的首尾空格
cleaned_data = ''.join(line.strip() for line in _server_data.splitlines())
SERVER_DATA: Dict = json.loads(cleaned_data)

方案3:使用environs原生的JSON类型解析(推荐)

environs库支持直接解析JSON类型的环境变量,无需手动调用json.loads,它会自动处理多行格式的问题:

# 替换原有的str读取和json.loads步骤
SERVER_DATA: Dict = env.json("SERVER_DATA")

验证

使用方案3修改代码后,无论是命令行还是VS Code中运行,都能正确解析.env中的多行JSON环境变量,输出预期结果:

test_server : server
test_server2 : server2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:55:35