Во-первых, извините за стену с текстом. Я стараюсь объяснить проблему как можно больше.Выполнять блок кода при каждом выполнении условия
Здравствуйте, из названия вы можете подумать, что я имею в виду простой оператор if
, и это может быть правдой. Сегодня я задал некоторые вопросы по этому проекту, и теперь хочу сделать что-то еще. Я делаю бота, используя Лигу Легенд Апи. То, что делает бот, - это просто напечатать некоторую статистику из текущей игры данного игрока. Для тех, кто не знаком с игрой, есть ранги. Ранг - одна из характеристик, которую бот печатает в чате, где он работает; эти показатели относятся к ранжированным играм, в отличие от обычных игр, ранжированные игры - это те, которые учитывают эти показатели. Так или иначе; Я получаю данные как json, и каждый раз, когда игрок является Unranked (не ранжированный игрок), я получаю 404 из запроса, и я хочу обработать этот 404, чтобы напечатать что-то еще. Прямо сейчас, это важная часть кода:
ids_seen = set()
for y in range(0, 10):
num += 1
i = r_match['participants'][num]
e_name = i['summonerName']
e_id = i['summonerId']
team_id = i['teamId']
champ = i['championId']
r_team = requests.get("https://lan.api.pvp.net/api/lol/lan/v2.5/league/by-summoner/{}/"
"entry?api_key=".format(e_id)).json()
champ_r = requests.get("https://global.api.pvp.net/api/lol/static-data/lan/v1.2/champion?"
"api_key=").json()
x = r_team["{}".format(e_id)][0]
e_tier = x['tier']
e_div = x['entries'][0]['division']
for key, value in champ_r['data'].items():
c_name = value['name']
c_id = value['id']
chat_say = """
{} - {} {} - Playing `#{}`""".format(e_name, e_tier, e_div, c_name)
if champ == c_id:
# if r_team['status']['status_code'] == 404:
# unranked_term = (e_name + " - " + "Unranked")
# unranked_say = """
# {} - Playing `#{}`""".format(unranked_term, c_name)
# yield from bot.send_message(message.channel, unranked_say)
# else:
if team_id == 100:
if not team_id in ids_seen:
yield from bot.send_message(message.channel, "```---Blue team---```")
yield from bot.send_message(message.channel, chat_say)
elif team_id == 200:
# if r_team['status']['status_code'] == 404:
# unranked_term = (e_name + " - " + "Unranked")
# unranked_say = """
# {} - Playing `#{}`""".format(unranked_term, c_name)
# yield from bot.send_message(message.channel, unranked_say)
if not team_id in ids_seen:
yield from bot.send_message(message.channel, "```--- Red team ---```")
yield from bot.send_message(message.channel, chat_say)
ids_seen.add(team_id)
yield from asyncio.sleep(1)
Когда я запускаю этот код выводится что-то вроде этого:
Player1 - Rank - Champion that is being played
Player2 - Rank - Champion that is being played
Player3 - Rank - Champion that is being played...
... и так далее; но в то время как это происходит, если он находит незарегистрированного игрока, как я уже упоминал, он бросает KeyError
, потому что, ну, он не может найти какие-либо ранжированные данные на json. Так; Я прокомментировал некоторые строки, которые я хочу реализовать.
Это:
# if r_team['status']['status_code'] == 404:
# unranked_term = (e_name + " - " + "Unranked")
# unranked_say = """
# {} - Playing `#{}`""".format(unranked_term, c_name)
# yield from bot.send_message(message.channel, unranked_say)
Я попытался размещая это именно там, где она, и я получал KeyError
снова; если я устанавливаю, что прямо здесь:
if team_id == 100:
# <- Right here if I'm not wrong.
if not team_id in ids_seen:
yield from bot.send_message(message.channel, "```---Blue team---```")
yield from bot.send_message(message.channel, chat_say)
я получить игрок и чемпион, которую играют, но ряды каждого отображаются как неоцениваемые; каждый не ранен. Вопрос в том, как я могу реализовать это для своего кода? Я не уверен, правильно ли я нахожусь на этом пути.
Я хотел бы выход быть что-то вроде:
Player1 - Rank - Champion # If it has ranked information
Player2 - Rank - Champion # Same
Player3 - Unranked - Champion # If the player is unranked
Все так что я могу запустить бот правильно, потому что каждый раз, когда есть неоцениваемый я получаю сообщение об ошибке, и я просто не могу избежать этого (за исключением матча без игрока без разницы)
Спасибо за любую помощь! :)
Привет @fuhrerguxez если этот или любой ответ решил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http: //meta.stackexchange.com/q/5234/179419), щелкнув галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Это не обязательно. –
Здравствуйте, действительно, все, что мне нужно, это попробовать ... кроме блока, у меня был один, но он был помещен неправильно. После некоторой настройки здесь и там я получил работу, спасибо! – Aguxez