Python

【初心者向け】Python3 基本文法 入門編Part3

はじめに

最近、Pythonを始めまして、学んだ基本文法を簡単にですがまとめていきます。
具体的に本記事では、例外処理(try文、exption、finally)の扱い方をまとめていきます。

注意:Python公式サイトに正式なチュートリアルもあるようですので、詳しいことは下記リンクをご確認下さい。

Pythonチュートリアル

まだPythonの開発環境が整っていない方

python開発環境をインストールする
【2021年版】Python開発環境をインストールする【2021年版】Python開発環境をインストールする 本記事では、Pythonの開発環境をMac環境にインストールする方法を説明して...

Python3 基本文法 (try 、except 、finally)

処理を実行した時に、結果がエラーとなったしまう場合があるかと思います。しかし、そこで実行結果によって事前にエラーが予測できる場合に例外処理を記載しておくことで、対処方法をあらかじめ用意しておくことができます。

# 基本文法
try :
    # 例外が発生する可能性がある処理
except :
    # 例外を受けて実行する処理

例外処理( try 、 except )

よく起こりそうな変数のキャスト忘れによるエラー(ValueError)を例題として、説明してきたいと思います。

処理の概要

数字を入力を求めて、数字であれば数字を返す。
数字以外であれば、エラーが発生し、例外処理を実行する。

キャストを気にせず記述すると、、、文字列を入れた時にエラー発生!

while True :
    num = input("数字を入力してください(quitで終了):")
    if num == "quit" :
        print("END")
        break
    result = 1 * int(num) # エラー発生箇所
    print(result)

>>> 入力値が「1」の場合 :1
>>> 入力値が「number」の場合:
Traceback (most recent call last):
  File "sample.py", line 6, in <module>
    result = 1 * int(num) # エラー発生箇所
ValueError: invalid literal for int() with base 10: 'number'

キャスト忘れによるValueErrorが発生しました。
このエラーが起きた時に例外処理を実行できるように記述し直してみましょう。

例外処理イメージ

例外処理イメージ

サンプルコード

while True :
    num = input("数字を入力してください(quitで終了):")
    if num == "quit" :
        print("END")
        break
    try :
        result = 1 * int(num) # エラー発生箇所
        print(result)
    except ValueError:
        print("エラー発生/数字を入れてください")

>>> 入力値が「1」の場合 :1
>>> 入力値が「number」の場合:エラー発生/数字を入れてください

このようにシステムエラーを出すのではなく、対処方法として適切なエラーメッセージを出すことができました。

例外処理( finally )

例外処理の記述方法として、「finally」という書き方もあります。
利用想定としては、システムエラーが発生しても、しなくても必ず流したい処理がある場合に利用したりします。

while True :
    num = input("数字を入力してください(quitで終了):")
    if num == "quit" :
        print("END")
        break
    try :
        result = 1 * int(num) # エラー発生箇所
        print(result)
    except ValueError:
        print("エラー発生/数字を入れてください")
    finally :
        print("処理終了")

>>> 入力値が「1」の場合 :
 1
  処理終了
>>> 入力値が「number」の場合:
 エラー発生/数字を入れてください
 処理終了

例外一覧 ※下記リンクから抜粋

よく起きるであろう例外処理をまとめておきましたので、参考程度にご確認下さい。

Exception システム終了以外の全ての組み込み例外はこのクラスから派生しています。全てのユーザ定義例外もこのクラスから派生させるべきです。
IndexError シーケンスの添字が範囲外の場合に送出されます。
KeyError マッピング (辞書) のキーが、既存のキーの集合内に見つからなかった場合に送出されます。
NameError ローカルまたはグローバルの名前が見つからなかった場合に送出されます。
SyntaxError パーザが構文エラーに遭遇した場合に送出されます。
TabError タブとスペースを一貫しない方法でインデントに使っているときに送出されます。
SystemError インタプリタが内部エラーを発見したが、状況は全ての望みを棄てさせるほど深刻ではないと思われる場合に送出されます。
TypeError 組み込み演算または関数が適切でない型のオブジェクトに対して適用された際に送出されます。関連値は型の不整合に関して詳細を述べた文字列です。

Python 組み込み例外

参考にしている書籍

まとめ

本記事では、例外処理(try文、exption、finally)の扱い方をまとめてみました。
例外が発生した際には、そこで処理が止まってしまうため個人的には、強制的にプログラムを終了させるのではなく、意図した形で処理を終えられるよう例外処理の記載をしておくことが良いと考えています。初歩的な例題でしたが、少しでも参考になっていましたら嬉しいです。

ABOUT ME
lusk
EC歴3年、23歳。 通販カート会社に2018年新卒で入社し、エンジニア、プロジェクトマネージャー、新規事業の立ち上げを経験。 仕事を楽しくするためのツール作成や業務改善の仕組みを作ったりしてます。