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
相关产品推荐
相关产品推荐

