【Python】デバッグ方法【エラー3種類の解決】

こんにちは、マサキです。

今回はPythonにおけるデバッグ方法・対策についてご紹介したいと思います。

プログラミングではエラーはつきものですよね…

これから、Pythonでよく出てくるエラーとその解決方法を説明していきます。

スポンサーリンク

エラーの種類と解決

今回は3種類のエラーについて説明ます。

Syntax Errors : 文法エラー

Syntax Errorの例としては↓のようなものがあります。

# printを実行 "のつけ忘れ
print("This is the error)

# エラーが出る
  File "<ipython-input-1-c1b5b7f1f4a3>", line 1
    print("This is the error)
                             ^
SyntaxError: EOL while scanning string literal

これはprint文の“This is the errorの最後にをつけていないことが原因です。

また、↓のようなエラーもあります。

# 空白が全角になっている
1 + 1

# エラーが出る
  File "<ipython-input-2-6a1d737d6e97>", line 1
    1 + 1
        ^
SyntaxError: invalid character in identifier

コードを書くときのスペース(空白)が全角になっているとこんなエラーが出てしまいます。

よくある文法エラーの例は以下のようになります。

  • クォテーションやカッコ()の閉じ忘れ
  • コロン:のつけ忘れ
  • ===を混同してしまっている
  • インデントの誤り
  • 全角の空白がある

Syntax Error(文法エラー)が出たときはこのようなミスをしていないか確認しましょう。

だいたいこれに気をつければ文法エラーは解消できます。

Runtime Errors : 実行エラー

Runtime Errorのエラーの例としては↓のようなものがあります。

print(1/0)

---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-3-2fc232d1511a> in <module>()
----> 1 print(1/0)

ZeroDivisionError: division by zero

1を0で割ることができないのでエラーとなります。

よくある実行エラーの例は以下のようになります。

  • 文字列やリストの要素エラー
  • 変数名・関数名の打ち間違え
  • 無限の繰り返し
  • 型と処理の不整合
  • ゼロ分割(0で割ってしまう)
  • ファイルの入出力誤り

原因がわからない場合はprintを挿入して処理の入出力を確認するのも良いです。

スポンサーリンク

Logical Errors : 論理エラー

論理エラーとは、「プログラムを実行できるが、意図する結果と異なる動作をする」エラーのことです。

例えば、以下のように関数medianを定義してx、y、zの中間値(真ん中の値)を求めようとすると、うまくできません。

def median(x,y,z):    
    if x>y:
        x = y
        y = x
    if z<x:
        return x
    if z<y:
        return z
    return y
median(3,1,2)
# 1

1、2、3の中間値は2なので、この出力は間違っています。

これで関数の定義が間違っていることがわかるので、どこが間違いなのかを調べるためにprintを使ってxとyの値を調べてみます。

def median(x,y,z):
    if x>y:
        x = y
        y = x
    print(x,y)
    if z<x:
        return x
    if z<y:
        return z
    return y
median(3,1,2)
# 1 1
# 1

xとyが同じ値になってしまっていることがわかります。

そこで、↓のように修正します。

def median(x,y,z):
    if x>y:
        w = x
        x = y
        y = w
    print(x,y)
    if z<x:
        return x
    if z<y:
        return z
    return y
median(3,1,2)
# 1 3
# 2

これで正しい値が出力されました!

このように、printを使うことで、処理の途中で変数の値がどう変わっているのかを知ることができ、エラーの解決に役立ちます。

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