数当てゲーム(https://augmented-vr.com/how-to-create-a-guessing-game/)などでinput関数を使ってユーザーの入力を受け取る処理を学習しましたが、もしユーザーが期待している数字ではなく文字を入力してしまった場合、エラーになってプログラムが停止してしまいます。そのようなエラーを回避して、別の処理を行わせたいときに使用するのが「try-except(トライ・エクセプト)文(例外処理)」です。

プログラムが止まる例

例えば、ユーザーに数字を入力してもらうプログラムを考えてみましょう。

# ユーザーの入力を受け取る
user_input = input("数字を入力してください: ")

# 入力された文字を数値に変換する(ここでエラーが起きる可能性がある)
number = int(user_input)

# エラーが起きなければ、正常に表示される
print(f"入力された数字は{number}です。")

もしユーザーが「10」などの数値を入力すれば問題ありません。しかし、間違えて「あ」などの文字を入力するとエラーを起こします。

Pythonは「あ」という文字を数値(int)に変換することができないため、ValueErrorというエラーを起こし、その時点でプログラムが強制終了してしまいます。
このようなエラーを回避し、「もしエラーが起きたら、代わりにこの処理をする」と指示を出すのがtry-exceptの役割です。

try-except文を使用する

Pythonでtry-except文を使用するにはtry、コロン「:」を使い、エラーが起きるかもしれない処理を書きます。そしてexcept、コロン「:」を使い、エラーが起きたときの処理を書きます。それぞれのコロンの下の行にはインデントをして処理のコードを書きます。なので例としてtry-except文は、

try:
    エラーが起きるかもしれないコード
except:
    エラーが起きたときのコード

の形式で記述します。この例ではインデントは半角スペース四つで行っています。
統一しているならインデントは半角スペース二つなどでも構いません。

  • tryブロック: 実行してみてほしい処理を書きます。
  • exceptブロック: もしtryの中でエラーが起きた場合、プログラムを止めずにこの中の処理を実行します。エラーが起きなければ、ここは無視されます。

では、実際にやってみましょう。
Google Colaboratoryを開いて新しいノートブックを作成し、

# エラーが起きるかもしれない処理をtryの中に入れる
try:
  # ユーザーの入力を受け取る
  user_input = input("数字を入力してください: ")

  # 入力された文字を数値に変換する(ここでエラーが起きる可能性がある)
  number = int(user_input)

  # エラーが起きなければ、正常に表示される
  print(f"入力された数字は{number}です。")

# もしtryの中でエラーが起きたら、exceptの中の処理が実行される
except:
  # エラーでプログラムを止めず、メッセージを表示する
  print("エラー: 数字以外の文字が入力されました")

と入力し実行してみましょう。すると結果は

数字を入力してください: あいうえお
エラー: 数字以外の文字が入力されました

のように表示されます(数字以外を入力した場合)。

プログラムの解説

  • エラーに備える(2行目): try: を使い、エラーが起きるかもしれない処理のブロックを開始しています。
  • 入力を受け取り変換する(4~7行目): input() 関数を使ってユーザーに入力を求め、変数user_inputに代入しています。int()を使って入力された文字を数値に変換し、変数numberに代入しようとしています。もしここで数字以外の文字(例えば「あいうえお」)が入力されていた場合、数値への変換ができずにエラーが発生します。
  • エラー発生時の処理(13~15行目): エラーが発生すると、十行目のprint関数は実行されず、すぐにexcept: ブロックに処理が移動します。そして十五行目で「エラー: 数字以外の文字が入力されました」と表示され、プログラムが途中で強制終了することなく安全に処理を終えることができます。

もし四行目で「10」などの正しい数字が入力されていた場合は、七行目の変換も成功し、十行目のprint関数が実行された後、except: ブロックは無視されてプログラムが終了します。

まとめ

  • プログラムは、想定外の処理(文字の数値化など)を行うとエラーになって停止してしまう。
  • try-exceptを使うと、エラーによるプログラムの強制終了を防ぐことができる。
  • try: の下にエラーが起きるかもしれない処理を書き、except: の下にエラー発生時の処理を書く。

ユーザーがどんな入力をしてくるか分からないプログラムを作る際には、このtry-exceptが必須の技術になります。ぜひ試してみてください。

open-in-colab

今回はこれで終了です。今回のサンプルを用意したので、もし必要な場合は上の「Open in Colab」と書いてあるボタンをクリックしてください。なおそのままだと編集不可なので編集をしたい場合は「ドライブにコピー」をクリックしてコピーしてください。
なおGoogle ColaboratoryについてわからなかったらGoogleColaboratoryを使ってみよう_導入編をご覧ください。

コメントを残す

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

CAPTCHA