【问题标题】:How do I resolve `raise KeyError(key) from None KeyError: [SLACK_BOT_TOKEN_HERE]` while uploading file to slack using python?如何在使用 python 将文件上传到 slack 时从 None KeyError: [SLACK_BOT_TOKEN_HERE] 中解决`raise KeyError(key)'?
【发布时间】:2020-11-04 12:07:14
【问题描述】:

这是我将 pdf 文件发送到我的松弛工作区的代码。但它会产生错误。

client = WebClient(token=os.environ[SLACK_BOT_TOKEN])

try:
    filepath = "./output.pdf"
    response = client.files_upload(channels='#mychannelid_here', file=filepath)
    assert response["file"]  # the uploaded file
except SlackApiError as e:
    # You will get a SlackApiError if "ok" is False
    assert e.response["ok"] is False
    assert e.response["error"]  # str like 'invalid_auth', 'channel_not_found'
    print(f"Got an error: {e.response['error']}")

错误是:

从无提升 KeyError(key) KeyError:SLACK_BOT_TOKEN_HERE

提前感谢您的帮助!

【问题讨论】:

    标签: python slack


    【解决方案1】:

    您最好使用getenv 和默认值(如果有意义的话)。

    import os
    
    SLACK_BOT_TOKEN = 'SLACK_BOT_TOKEN'
    DEFAULT_SLACK_BOT_TOKEN_VALUE = 'Hello Slack'
    token = os.getenv(SLACK_BOT_TOKEN, DEFAULT_SLACK_BOT_TOKEN_VALUE)
    print(token)
    

    【讨论】:

      【解决方案2】:

      您正在尝试引用变量 SLACK_BOT_TOKEN,但您的代码未定义具有此名称的变量。

      可能您的意思是token=os.environ["SLACK_BOT_TOKEN"],其中在环境中查找文字字符串SLACK_BOT_TOKEN(因此您应该有一个具有此名称的环境变量,现在您正在查找它)。

      一种常见的安排是将令牌存储在未保存在代码中的位置(因此保留在您的 git 存储库等之外),并要求您在运行 Python 之前在环境中设置它。所以,例如

      bash$ secrettoken="your token here"
      bash$ export secrettoken
      bash$ python -c 'import os; print(os.environ["secrettoken"])'
      your token here
      

      这在 Windows 上的工作方式类似(尽管不完全相同),但语法通常不同,而且极端情况也很奇怪。

      【讨论】:

      • 感谢您的回复!我在变量SLACK_BOT_TOKEN 内的代码开头定义了我的slack bot 令牌。我还尝试将我的令牌放入 token=os.environ["token here"] ,但两者似乎都不起作用。
      • 那么你的意思可能是token=SLACK_BOT_TOKEN;但问题中的错误消息表明您没有正确定义此变量。最简单的解决方法是token="token here"。 (虽然问题的格式不是很好,完整的traceback会更好。)os.environ["string"]的意思是获取一个名为string的环境变量;如果您尚未定义包含令牌的环境变量,那么显然不要尝试获取一个。
      • 我使用了os.getenv(SLACK_TOKEN_VARIABLE) 而不是os.environ("SLACK_TOKEN_STRING"),问题就解决了。感谢您的时间和帮助!
      • 将另一个变量的名称放在一个变量中似乎有点矫枉过正,但对你来说更有力量。我稍微更新了答案。
      猜你喜欢
      • 2019-05-01
      • 2021-11-10
      • 1970-01-01
      • 2021-05-06
      • 2016-05-25
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      相关资源
      最近更新 更多