【Python】エラーの発生に強いプログラムの作り方


前回、Pythonプログラムのエラーと例外についてまとめました。

【Python】プログラムエラーと例外の意味まとめ

2020年1月12日

例えば、間違えて関数に数字以外の文字列を入力した場合はエラーが発生し、プログラムが終了します。
今回は例外処理に対して、想定外のエラーが発生した時に適切に処理ができるようなプログラムの作り方を紹介します。

「Python」例外エラーの発生に値する適切な処理をするプログラムの作成

以下では、Pythonのプログラムに、「平成」を入力した際に、「heisei_command()」関数が実行されます。
プログラム実行時に「平成,2000」とコロン「,」で平成と数値(西暦)を入力します。
実行結果により、西暦を計算し、平成生まれなのかそうでないのかを判断します。

このプログラムの中で、「split()メソッド」で分割し、「year_str」変数には数値がはい入ります。
ここで、数値以外の「文字列」を入力すると、「ValueError」が発生します。

この「ValueError」が発生すると、例外で発生したエラーメッセージを返す処理を実行します。

例外処理のプログラミング「try文」

例外処理では、「try文」を使用して書きます。
以下のプログラムでは、「平成」という文字列と数値(西暦)をコロン「,」区切りで入力することで、その数値(西暦)を平成何年かを出力します。

まずは以下のように「try文」を作成し、try文の中で例外「ValueError」が発生した場合は、メッセージにエラーを示す文字列を指定して返すプログラムとなります。

※ reigai_test.py

def heisei_command(command):
    heisei, year_str = command.split(',')
    try:
        year = int(year_str)
        if year >= 1989:
            heisei_year = year - 1988
            response = '西暦{}年は、平成{}年です。'.format(year, heisei_year)
        else:
            response = '西暦{}年は、平成ではありません。'.format(year)
    except ValueError:
        response = '数値を入力してください。'
    return response


while True:
    command = input('bot> ')
    response = ''

    if '平成' in command:
        response = heisei_command(command)

    if 'さようなら' in command:
        print('サヨウナラ')
        break

    if not response:
        response = '何を言っているのかわからない'
    print(response)

※ 実行結果

$ python3 reigai_test.py 
bot> 平成,元年
数値を入力してください。
bot> 平成,3年
数値を入力してください。
bot> 平成,2000
西暦2000年は、平成12年です。
bot> 平成,1990
西暦1990年は、平成2年です。
bot> さようなら
サヨウナラ
$ 

例外処理は事前にチェックできるエラーケースを把握してif文などで対処するようにしましょう。


関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

blank

インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!