Я пытаюсь заставить своего бота Python использовать переменную, которую я уже определил (случайный), прочитать файл JSON и отправить мне URL-адрес, соответствующий переменной, которую он дал.
with open('data.json', 'r') as json_data:
data = json.load(json_data)
max = data["max"]["max"]
random = random.randint(1, max)
url = data[random]["url"]
Но когда я запускаю бот, он выполняет все "KeyError", и после проверки, заменив url[random]["url"]
на url["5"]["url"]
он правильно отправил мне url, который соответствует 5 я "Не знаю, невозможно ли сделать то, что я пытаюсь сделать таким образом, или если есть какой-то специальный формат, который я должен использовать:
вот мой вопрос, и я действительно не знаю, как правильно это сформулировать, так как я не знаю терминологию так:
Есть ли простой способ использовать эту "случайную" переменную, когда мой бот читает из json?
Я предпочел бы использовать такой вид формирования, потому что это то, что я понимаю, и привык, но если это невозможно, я не против пробовать что-то еще
Если вам интересно, как выглядит json, это немного напоминает:
{
"max": {"max":139},
"1": {stuff here},
"2": {stuff here},
"3": {stuff here},
"4": {stuff here},
"etc"...
}
Проблема в том, что random.randint
возвращает целое число, в то время как словарь, к random.randint
вы обращаетесь, имеет строковые ключи. Вы можете решить это, обернув str
вокруг случайной переменной при доступе к словарю:
url = data[str(random)]["url"]
В файле json есть строки в виде ключей. Пытаться:
url = data[str(random)]["url"]
random.randint
возвращает целое число (как следует из названия). Вам нужно преобразовать его в строку. Также не называйте этоrandom
, это помешает названию модуля.rdm = str(random.randint(1, max))
. Редактировать : также не используйтеmax
в качестве имени переменной - оно перезапишет__builtin__.max
.