タグ: 例外処理

  • Pythonの例外処理を行うtry, except

    Pythonの例外処理を行うtry, except

    pythonでのプログラムの時に、エラーが起こることがあります。
    エラーはプログラムが正常に組み立てられていないことを示してくれるいいやつなのですが、
    時に、エラーのせいでプログラムが動かなくなってしまう時があります。

    構文的には正しいのに、実行時にエラーが出ることがあります。
    構文が文法的に正しくない時に出るエラーを構文エラー
    文法的に正しいのに、論理的に間違っているエラーを例外と言います。

    例外の例として、
    TypeError:演算する者同士の方が異なっている
    EX. word/2 , 4*number

    ZeroDivisionError:0で割ってしまっている
    EX. 3/0

    ValueError:型は合っているが、値が適切でない
    EX. int(“string”)

    条件分岐をすることによって、エラーを未然に防ぎ、論理的に正いプログラムを作成することも可能ですが、エラーが怒った時には例外処理を行うという処理を行うという選択肢を取ることもできます。

    その時に使用するのがtry, exceptです。

    try: 
        実行したい処理(例外を含むかもしれない)
    except エラー名:
        例外発生時に行う処理

    といったように使います。
    例として、

    try:
        print(10 / 0)
    except ZeroDivisionError:
        print('できませんでした')
    #出力
    できませんでした

    となります。
    ただ、exceptで捉えることができるエラーは指定されたエラーのみ
    (今回のプログラムではZeroDivisionErrorのみ)なので、そのほかのエラーが発生した場合に関しては、プログラム実行時にエラーとして出力されます。

    複数のエラーが想定される際には、except エラー名: を追加しましょう。

    try:
        print(10 / 0)
    except ZeroDivisionError:
        print('できませんでした')
    except ValueError:
        print('値がうまく合致しませんでした')

    except節は複数指定することができます。

    except節で例外名を全て指定しないと、全ての例外をキャッチすることが可能です。

    try:
        print(10 / 0)
    except:
        print('できませんでした')

    ただ、これに関して、全ての例外をキャッチしてしまうということで、プログラム制作者が想定していない例外が発生した時にもそのエラーを隠してしまうので、使用する際には非常に注意が必要です。

    try-exceptの構文に関連して、例外が発生した後の処理を指定したりする説があります。
    それを軽く記述しておきます。
    詳しくは別のブログで紹介しようと思います。

    • raise:故意に例外を発生させる
    • pass例外発生後に何も処理を行わない
    • else例外が発生しなかった場合にのみ処理
    • finally例外の発生に関わらず必ず処理