COMPETITIVE DEBUG STUDIO
REの原因を調査する方法
REは「Runtime Error」の略で、プログラムの実行中にエラーが発生して途中で止まった状態です。 WAと違い、答えが間違っている以前に、コードが最後まで実行できていません。
Competitive Debug Studioでは、エラー名、発生行、入力、スタックトレースを確認しながら、 REの原因を探せます。
まずRE判定を確認する
実行・判定を行うと、右側の実行結果にAC・WA・TLE・REなどの判定が表示されます。 REと表示された場合は、プログラムの実行中に何らかのエラーが発生しています。
REでは、まず「何というエラーか」と「どの行で止まったか」を確認します。
エラー内容を確認する
REが発生したケースを選ぶと、入力やエラー内容を確認できます。 まずはエラー名を見て、どの種類の問題が起きているのかを把握します。
例えば、IndexErrorなら配列の範囲外アクセス、KeyErrorなら辞書に存在しないキーへのアクセス、 ValueErrorなら数値変換などの失敗を疑います。
スタックトレースで発生行を確認する
スタックトレースを見ると、どの関数から呼ばれて、最終的にどの行でエラーになったかを確認できます。 一番下に近い行に、実際のエラー発生箇所が表示されることが多いです。
エラー行だけを見るのではなく、その直前にどんな値が入っていたか、 どの入力でその行に到達したかも確認すると原因を見つけやすくなります。
コード上の発生行を確認する
エラー発生行が分かったら、コード上でその行を確認します。 配列、辞書、型変換、割り算、再帰など、エラーになりやすい処理を重点的に見ます。
例えば、a[i] で止まっている場合は、i が配列の長さ以上になっていないか確認します。
int(input()) で止まっている場合は、入力形式が想定と違っていないか確認します。
REでよくある原因
REは、エラー名から原因をかなり絞れます。 まずは次のような原因を確認してください。
| エラー | よくある原因 |
|---|---|
| IndexError | 配列の範囲外にアクセスしている |
| KeyError | 辞書に存在しないキーを参照している |
| ValueError | 数値変換や入力の分解に失敗している |
| ZeroDivisionError | 0で割っている |
| RecursionError | 再帰が深すぎる、または終了条件が間違っている |
| TypeError | 型が合わない処理をしている |
RE調査の基本手順
- 実行・判定でREを確認する
- 失敗ケースを選ぶ
- エラー名を確認する
- 入力を確認する
- スタックトレースを見る
- コード上の発生行を確認する
- 配列・辞書・型変換・割り算・再帰を確認する
- 修正後、同じケースを再実行する
- 全ケースを再判定する


コメント