REの原因を調査する方法

競プロデバッグツール

COMPETITIVE DEBUG STUDIO

REの原因を調査する方法

REは「Runtime Error」の略で、プログラムの実行中にエラーが発生して途中で止まった状態です。 WAと違い、答えが間違っている以前に、コードが最後まで実行できていません。

Competitive Debug Studioでは、エラー名、発生行、入力、スタックトレースを確認しながら、 REの原因を探せます。

まずRE判定を確認する

実行・判定を行うと、右側の実行結果にAC・WA・TLE・REなどの判定が表示されます。 REと表示された場合は、プログラムの実行中に何らかのエラーが発生しています。

RE判定が表示された画面

REでは、まず「何というエラーか」と「どの行で止まったか」を確認します。

エラー内容を確認する

REが発生したケースを選ぶと、入力やエラー内容を確認できます。 まずはエラー名を見て、どの種類の問題が起きているのかを把握します。

REケース詳細画面

例えば、IndexErrorなら配列の範囲外アクセス、KeyErrorなら辞書に存在しないキーへのアクセス、 ValueErrorなら数値変換などの失敗を疑います。

スタックトレースで発生行を確認する

スタックトレースを見ると、どの関数から呼ばれて、最終的にどの行でエラーになったかを確認できます。 一番下に近い行に、実際のエラー発生箇所が表示されることが多いです。

スタックトレース画面

エラー行だけを見るのではなく、その直前にどんな値が入っていたか、 どの入力でその行に到達したかも確認すると原因を見つけやすくなります。

コード上の発生行を確認する

エラー発生行が分かったら、コード上でその行を確認します。 配列、辞書、型変換、割り算、再帰など、エラーになりやすい処理を重点的に見ます。

REのエラー発生行が分かる画面

例えば、a[i] で止まっている場合は、i が配列の長さ以上になっていないか確認します。 int(input()) で止まっている場合は、入力形式が想定と違っていないか確認します。

REでよくある原因

REは、エラー名から原因をかなり絞れます。 まずは次のような原因を確認してください。

エラー よくある原因
IndexError 配列の範囲外にアクセスしている
KeyError 辞書に存在しないキーを参照している
ValueError 数値変換や入力の分解に失敗している
ZeroDivisionError 0で割っている
RecursionError 再帰が深すぎる、または終了条件が間違っている
TypeError 型が合わない処理をしている

RE調査の基本手順

  1. 実行・判定でREを確認する
  2. 失敗ケースを選ぶ
  3. エラー名を確認する
  4. 入力を確認する
  5. スタックトレースを見る
  6. コード上の発生行を確認する
  7. 配列・辞書・型変換・割り算・再帰を確認する
  8. 修正後、同じケースを再実行する
  9. 全ケースを再判定する

POINT

REは、まずエラー名と発生行を見る。

REは怖く見えますが、エラー名と発生行を確認すれば原因を絞れます。 どの入力で、どの行が、何のエラーで止まったのかを順番に見ることが大切です。

次に読むページ

コメント

タイトルとURLをコピーしました