エラー

プログラムの文法などを間違ったまま実行すると、そこでプログラムは停止し、エラーが発生した行数や理由が表示される。

以降の例はそのごく一部だが、初めのうちはエラーメッセージをそのままネット検索するのがいいかもしれない。

エラーの一覧(公式ドキュメント)。


    文法エラーと例外エラー

    Pythonのプログラミングとしての記述方法が間違っている場合を(ここでは)文法エラーとする。文法エラーはPythonがその「プログラムもどき」を解釈できず、その全体が実行されず(importなど一部除いて)、エラー表示となる。

    ここではSyntaxErrorIndentationErrorが文法エラー。

    文法エラー以外のエラーを例外という。例外は文法としては正しくても実行時の状況によってはエラーの可能性があるもの。実際にエラーでもその直前のコードまでは実行されて、エラー表示して停止する。

    例外発生でも停止しないようにするには、例外処理が必要。


    SyntaxError: 文法エラー("や:を忘れる)

    #!/usr/bin/env python3
    
    print('こんにちは') # ここも実行されない
    print("Hello)

    文字列を囲う"を忘れたとき、

      File "./sample.py", line 4
        print("Hello)
                    ^
    SyntaxError: EOL while scanning string literal

    文法エラーなので、直前のコード「こんにちは」も出力されない。

    #!/usr/bin/env python3
    
    if True
      print("こんにちは")

    if文の末尾の:(コロン)を忘れたとき、

      File "./sample.py"s, line 3
        if True
              ^
    SyntaxError: invalid syntax

    IndentationError: 文法エラー(インデントを間違える)

    #!/usr/bin/env python3
    
    if True:
    print("こんにちは")

    Pythonではインデントが文法のうちなので、

      File "./sample.py", line 4
        print("こんにちは")
            ^
    IndentationError: expected an indented block

    NameError: 関数名を間違える

    #!/usr/bin/env python3
    
    print("こんにちは")
    prin("Hello, world!")

    「print」とすべきところを「prin」にしてしまった場合、

    こんにちは
    Traceback (most recent call last):
      File "./sample.py", line 4, in <module>
        prin("Hello, world!")
    NameError: name 'prin' is not defined
    

    例外エラーなので、直前のコードまで実行されている。


    TypeError: 文字列と数値を足してしまう(不適切な型)

    #!/usr/bin/env python3
    
    print("今年は" + 2018 + "年")
    # ただしくは、
    print("今年は" + str(2018) + "年")
    

    Pythonでは文字列と数値は+で結合できないので、

    Traceback (most recent call last):
      File "./sample.py", line 3, in <module>
        print("今年は" + 2018 + "年")
    TypeError: must be str, not int

    ValueError: 数に変換できない

    #!/usr/bin/env python3
    
    入力 = input("整数入力> ")
    整数 = int(入力)
    print(整数)
    

    整数を入力すべきところを文字入力してしまうと、

    整数入力> a
    Traceback (most recent call last):
      File "./sample.py", line 4, in <module>
        整数 = int(入力)
    ValueError: invalid literal for int() with base 10: 'a'

    IndexError: インデックスの範囲外

    #!/usr/bin/env python3
    
    リスト = [1, 2, 3]
    print(リスト[3])
    # インデックスは0から始まる
    

    リストのインデックスの範囲を超えてしまうと、

    Traceback (most recent call last):
      File "./sample.py", line 4, in <module>
        print(リスト[3])
    IndexError: list index out of range