Harsh Parekh
Harsh Parekh

Reputation: 45

How do I resolve `raise KeyError(key) from None KeyError: [SLACK_BOT_TOKEN_HERE]` while uploading file to slack using python?

Here is my code to send a pdf file to my slack workspace. But it produces error.

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']}")

Error is :

raise KeyError(key) from None KeyError: SLACK_BOT_TOKEN_HERE

Thanks in advance for help !

Upvotes: 2

Views: 2740

Answers (2)

balderman
balderman

Reputation: 23825

You better use getenv with a default (if it makes sense).

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)

Upvotes: 2

tripleee
tripleee

Reputation: 189908

You are trying to refer to a variable SLACK_BOT_TOKEN but your code does not define a variable with this name.

Probably you mean token=os.environ["SLACK_BOT_TOKEN"] where the literal string SLACK_BOT_TOKEN is looked up in the environment (so you should have an environment variable with this name, and now you are looking it up).

A common arrangement is to store the token in a place where it is not saved in your code (so kept out of your git repository etc) and require you to set it in the environment before running Python. So, for example

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

This works similarly (though not exactly the same) on Windows, with the usual different syntax and weird corner cases.

Upvotes: 0

Related Questions