繁体   English   中英

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

[英]KeyError with os.environ[] accessing variable from .env file

我正在尝试构建一个 slackbot 并从 separate.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")

文档(强调我的):

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

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

我通常使用 YAML 文件,但根据pip python-dotenv ,您应该使用os.getenv("SLACK_TOKEN")而不是os.environ["SLACK_TOKEN"]

不确定您是否仍然遇到此问题,但其他任何人都遇到此问题 - 这就是我解决它的方法。 注意:我还在学习

我在同一目录中创建了一个具有正确值的.env文件,然后将以下内容写入“app.py”

from http import client
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import os
from dotenv import load_dotenv
from pathlib import Path

load_dotenv()
#loading from .env file that was made
SLACK_BOT_TOKEN = os.environ['SLACK_BOT_TOKEN']
SLACK_APP_TOKEN = os.environ['SLACK_APP_TOKEN']

app = App(token=SLACK_BOT_TOKEN)

if __name__ == '__main__':
    SocketModeHandler(app, os.environ['SLACK_APP_TOKEN']).start()

在运行之前,确保将 go 放入 python 安装文件夹并运行安装证书命令。 必须安装才能成功与服务器通信。

返回此消息并确认 Bolt 应用程序正在运行。

希望这可以帮助!

----- 来源----

我遇到了同样的问题,即使更新了 .env 文件也没有帮助,代码也没有读取新变量,所以我尝试了 cml 并使用 SET NAMEOFVARIABLE = VALUE,它起作用了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM