まず、文字の壁にごめんなさい。私は可能な限り問題を説明しようとします。条件が満たされるたびにコードブロックを実行する
こんにちは、タイトルから、私は単純なif
のステートメントを参照すると思うかもしれませんが、それは真実かもしれません。私はこのプロジェクトについて今日いくつかの質問をしてきましたが、今は別のことをしたいと思います。私はLegends of Legends Apiを使ってボットをやっています。ボットが行うことは、特定のプレーヤーの現在のゲームからいくつかの統計を出力することです。ゲームに不慣れな人には、ランクがあります。ランクは、ボットが作業しているチャットにプリントする統計の1つです。それらの統計は、通常のゲームとは異なり、ランク付けされたゲームからのものであり、ランク付けされたゲームは、これらの統計にカウントされるものです。とにかく;私は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
未ランクの選手なしで試合を見ている場合を除く)
ありがとうございました! :)あなたはKeyError
を取得している正確な場所でtry except
blockを追加してみてくださいすることができます
こんにちは@fuhrerguxezこれまたは任意の答えがあなたの質問を解決した場合、[それを受け入れる](http://meta.stackexchange。com/q/5234/179419)をクリックしてください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。これを行う義務はありません。 –
こんにちは、本当に必要なのは試しでした...ブロックを除いて、私は1つ持っていましたが、それは間違って配置されました。いくつかの微調整の後で、私はそれを働かせました、ありがとう! – Aguxez