赤いメッセージが出たとき
Python で書いた bot にまちがいがあると、画面に赤いメッセージが出ます。 ゲームは、専門用語のエラーを、やさしい日本語に直して見せます。
(ブロックで遊んでいて「思いどおりに動かない」だけなら、こまったときのレスキュー隊へ。ここは Python の赤いメッセージの話です)
メッセージの読みかた
Section titled “メッセージの読みかた”メッセージには、いつも 2 つのことが書いてあります。
- 何が起きたかと、何行目か
- 「こうしてみよう」(最大 2 つ)
「こうしてみよう」は、答えではなく、確かめる場所の案です。 正しい直しかたを決めつけることはしません。
よくあるエラー
Section titled “よくあるエラー”| 表示 | 意味 | まず確かめること |
|---|---|---|
| 「〜」という名前が見つかりません | 使う前に、その名前を作っていない、または打ち間違い | 似た名前があるとき「〜の打ち間違いではありませんか?」と出る。変数は使う前に値を入れる |
| 文法のエラー(SyntaxError) | 書きかたがまちがっている | コロン「:」や、カッコの閉じ忘れ。字下げ(インデント)はスペース 4 つでそろえる |
| 数値と「何もない値(None)」を一緒に使おうとしています | 値が入っていない変数を計算に使った | 変数に値を入れ忘れていないか。関数が return を忘れていないか |
| リストの範囲外を読もうとしています | リストの長さより大きい番号を読んだ | 番号は 0 から始まる。len(リスト) で長さを確かめる |
| 辞書にないキーを読もうとしています | state["…"] の名前がちがう | キーの綴り。.get(キー, 代わりの値) を使うと安全 |
| 0 で割ろうとしています | 割る数が 0 になった | if で、0 のときを先に処理する |
| 1 回の考える時間が長すぎます | 1 回の update で使える計算量を超えた | 毎回すべて計算し直していないか。結果を変数に覚えておく → 命令数の上限 |
| 関数の呼び出しが深すぎます | 関数が自分自身を呼びつづけている | 終わる条件(if)を最初に書く |
エラーが出ても、試合は続く
Section titled “エラーが出ても、試合は続く”update の中でエラーが起きても、試合は止まりません。
| 起きたこと | タンクは |
|---|---|
| 1 回エラーになった | drive と steer は前回のまま。fire と barrier はしない |
| 10 回つづけてエラーになった | それ以降は、何もしなくなる(行動停止) |
| 命令数の上限を超えた | その回は前回と同じ動き。試合のあいだに 3 回までは許される。4 回目で行動停止 |
| 戻り値が辞書ではなかった | 前回と同じ動き |
中を見たいとき
Section titled “中を見たいとき”print(...) で、途中の値を実行ログに出せます。対戦画面の下に出ます。
「あの値は、いくつだったんだろう」と思ったら、print を足して確かめましょう。
- 書ける Python の範囲 → Sub-Python の構文
- 命令数 → 命令数の上限