デバッグ
コーディングでは、スペルミスやインデントの間違いによってプログラムが動かないことがあるので、そのバグを見つけて直すためのコツを勉強しました。
バグを見つける
よくあるエラーは主に3種類
・文法エラー(SyntaxError)
・実行時エラー
・論理エラー(ロジック)
文法エラー
は、修正が最も簡単です。スペルミス、if文の最後のコロンや( )忘れ、キーワードタイプミスなど
>>> print("Hello world!)
File "<stdin>", line 1
print("Hello world!)
^
SyntaxError: EOL while scanning string literal
>>>
EOL: End Of Lineの意味で、行の最後で問題が起きていることを表している。
while scanning string literal:文字列に関する問題。
この場合は、"Hello world!の最後に「”」が抜けていたためです。
実行時エラー
こちらは、少し見つけるのが難しくなります。プログラムが実行されて初めて表に現れます。例えば、定義する前に変数を使おうとしたとか、変数の定義を忘れて使ってしまった場合など。
>>> print(variable)
Traceback (most recent call last):
File "C:User/Ziggy/My Documents chanses.py", line 1, in <module>
NameError: name 'variable' is not defined
>>>
File "C:User/Ziggy/My Documents chanses.py":プログラムのFile名と保存先
line 1:コードの実行が止まってしまった行の番号
NameError:エラーの種類
name 'variable' is not defined:「variable」は定義されていません
論理エラー
こちらは、エラーメッセージは出てこないし、プログラムも最後まで実行されてしまっているので、見つけるのが最も難しいエラーです。
例えば、「<」とすべきところを「>」と書いてしまったり、間違った演算子や値を使うことで論理エラーが起きます。
>>> for x in range (0,9):
... print("5 x", x, "=", x*5)
...
5 x 0 = 0
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
>>>
range( )の引数が0〜9だと、0から順に9個分しか答えを返さないので、
5✖️9は表示されません。
バグチェックリスト
数に関するミスは、ある数を0で割ろうとしたり、数と文字列を足そうとしたりする場合など。
・キーワードタイプミス
・引用符や()忘れ
・インデントは正しいか?
・if文で==と間違えて=を使ってないか?
・if, elif, elseの後の:を忘れてないか?