簡體   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