-
エラーメッセージの読解: エラーメッセージは、問題の原因や場所を特定する手がかりとなります。まずはエラーメッセージを注意深く読み、エラーの種類や関連する行番号、ファイル名などを把握しましょう。
例:
ValueError: invalid literal for int() with base 10: 'abc'
このエラーメッセージからは、
int()
関数が文字列'abc'
を整数に変換しようとして失敗していることがわかります。 -
デバッグステートメントの挿入: 問題の箇所を特定するために、コードにデバッグステートメントを挿入することができます。例えば、変数の値や条件分岐の結果を出力するなど、実行時の情報を確認することができます。
例:
def calculate_average(numbers): total = sum(numbers) average = total / len(numbers) print("Total:", total) print("Average:", average) return average numbers = [1, 2, 3, 4, 5] result = calculate_average(numbers)
上記のコードでは、
calculate_average
関数内で変数total
とaverage
の値を出力しています。これにより、実行時に変数の値を確認することができます。 -
スタックトレースの分析: エラーメッセージに含まれるスタックトレースは、エラーが発生した箇所の呼び出し関係を示しています。スタックトレースを分析することで、エラーが発生した経緯や関連するコードを特定することができます。
例:
Traceback (most recent call last): File "example.py", line 5, in <module> result = calculate_average(numbers) File "example.py", line 2, in calculate_average average = total / len(numbers) ZeroDivisionError: division by zero
このスタックトレースからは、エラーが
calculate_average
関数の2行目で発生していることがわかります。 -
単体テストの作成: 問題のあるコードを特定し、修正するために、単体テストを作成することが有効です。テストケースを作成し、期待される結果と実際の結果を比較することで、問題の箇所を特定することができます。
例:
import unittest def divide_numbers(a, b): return a / b class DivideNumbersTestCase(unittest.TestCase): def test_divide_numbers(self): result = divide_numbers(10, 2) self.assertEqual(result, 5) result = divide_numbers(10, 0) self.assertRaises(ZeroDivisionError, divide_numbers, 10, 0) if __name__ == '__main__': unittest.main()
上記のコードでは、
divide_numbers
関数の単体テストを行っています。ゼロ除算エラーが発生することを確認するテストケースも含まれています。
例:
import logging
logging.basicConfig(level=logging.DEBUG)
def calculate_average(numbers):
total = sum(numbers)
logging.debug("Total: %s", total)
average = total / len(numbers)
logging.debug("Average: %s", average)
return average
numbers = [1, 2, 3, 4, 5]
result = calculate_average(numbers)
上記のコードでは、logging
モジュールを使用してデバッグレベルのログを出力しています。これにより、実行時の情報をログとして確認することができます。