KeyError 与 os.environ[] 从 .env 文件访问变量

问题描述

我正在尝试构建一个 slackbot 并从单独的 .env 文件中检索 slack 令牌。当我运行它时,我被抛出一个如下所示的错误

raise KeyError(key) from None
KeyError: 'SLACK_TOKEN'

机器人的代码 (ShoppingListBot.py) 在这里

import slack
import os
from pathlib import Path
from dotenv import load_dotenv

env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)

client = slack.WebClient(token=os.environ["SLACK_TOKEN"])

.env 文件 (.env) 的代码在这里

SLACK_TOKEN="xoxb-1691324762768-1693412284260-RdP0ZQUaQxD9j9mtLlwfNMbD"

解决方法

您应该使用 os.environ["SLACK_TOKEN"] 而不是 os.getenv("SLACK_TOKEN")

来自 docs(强调我的):

此映射在第一次导入 os 模块时捕获,通常在 Python 启动期间作为处理 site.py 的一部分进行捕获。在此时间之后对环境所做的更改不会反映在 os.environ 中,除非直接修改 os.environ 所做的更改。

或者在override=True中使用load_dotenv()

,

我通常使用 YAML 文件,但根据 pip python-dotenv

,您似乎应该使用 os.getenv("SLACK_TOKEN") 而不是 os.environ["SLACK_TOKEN"]