第21回|Pythonのエラー処理とは?tryとexceptの基本をやさしく解説|はじめてのPython

当サイトでは、コンテンツの一部に広告を掲載しています。
第21回|Pythonのエラー処理とは?tryとexceptの基本をやさしく解説|はじめてのPython

はじめてのPython | 第21回

目次

1. はじめに

この回では、エラー処理の基本を学びます。前回は、ファイルに書き込む方法を確認しました。

Pythonを書いていると、入力値が想定と違ったり、変換に失敗したりしてエラーが出ることがあります。エラーが起きたときの対応方法を知っておくと、プログラムを途中で止めずに、分かりやすく処理できます。

2. この回で学ぶこと

  • エラーとは何か
  • 例外とは何か
  • try
  • except
  • 入力値の変換エラーに対応する方法

3. 概念の説明

プログラムを実行したときに問題が起きると、エラーが表示されます。その中でも、実行中に発生するエラーは例外と呼ばれます。

たとえば、文字列を数値に変換するときに、数字ではない文字を渡すと例外が発生します。

number = int("abc")

このコードでは、"abc" を整数に変換できないため、エラーになります。

エラーが起きそうな処理を安全に扱いたいときは、tryexcept を使います。

try:
    number = int("abc")
    print(number)
except ValueError:
    print("数字を入力してください")

try: の中には、エラーが起きる可能性がある処理を書きます。except ValueError: の中には、そのエラーが起きたときに実行したい処理を書きます。

この例では、int("abc")ValueError が発生したときに、プログラムがそのまま止まる代わりに 数字を入力してください と表示します。

入力値を int() で数値に変換するときも、同じ考え方を使えます。

text = input("数字を入力してください: ")

try:
    number = int(text)
    print(number)
except ValueError:
    print("数字ではありません")

このコードでは、入力された文字が整数に変換できるかを確認しています。数値ならそのまま使い、数値でなければ別のメッセージを表示できます。

4. サンプルコード

次のコードを見てください。

text = input("数字を入力してください: ")

try:
    number = int(text)
    print("2倍した値:", number * 2)
except ValueError:
    print("数字を入力してください")

このコードでは、入力された値を整数に変換して、2倍した結果を表示しています。数字ではない入力だった場合は、エラーメッセージではなく、自分で用意した説明を表示します。

5. 実行手順

まず、error_handling.py というファイルを作ります。

touch error_handling.py

error_handling.py をエディターで開き、次のコードを書いて保存します。

text = input("数字を入力してください: ")

try:
    number = int(text)
    print("2倍した値:", number * 2)
except ValueError:
    print("数字を入力してください")

保存したら、ターミナルで次のコマンドを実行します。

python3 error_handling.py

たとえば 12 と入力すると、結果は次のようになります。

数字を入力してください: 12
2倍した値: 24

一方で abc と入力すると、結果は次のようになります。

数字を入力してください: abc
数字を入力してください

6. コードの読み方

  • text = input("数字を入力してください: ") は、キーボードから入力された内容を文字列として受け取っています。
  • try: の中には、int(text) で整数に変換する処理と、その結果を使う処理を書いています。
  • ここは、入力内容によってエラーが起きる可能性がある部分です。
  • number = int(text) は、text を整数に変換しています。
  • もし text"12" なら成功しますが、"abc" のような文字なら ValueError が発生します。
  • except ValueError: は、その ValueError が起きたときに実行される部分です。
  • この例では、print("数字を入力してください") を実行しています。
  • そのため、プログラムがその場で止まる代わりに、入力ミスを説明するメッセージを出せます。

7. 初学者がつまずきやすい点

  • エラーの中でも、実行中のものを例外と呼ぶ
  • try にはエラーが起きる可能性のある処理を書く
  • except には、エラーが起きたときの処理を書く
  • int() の変換失敗では ValueError が出る
  • 入力値を数値に変換するときは、エラー処理が必要になることがある

特に、tryexcept はセットで考える必要があります。try だけを書いても、エラーへの対応にはなりません。

また、except ValueError: と書くことで、どの種類のエラーに対応するのかを明示できます。

8. よくあるエラー

1つ目は、except の種類が合っていない場合です。

text = input("数字を入力してください: ")

try:
    number = int(text)
    print(number)
except TypeError:
    print("エラーです")

このコードでは、int(text) で起きるのは TypeError ではなく ValueError です。そのため、文字列 abc を入力すると正しく対応できません。

2つ目は、try のあとにインデントしていない場合です。

try:
number = int("10")
except ValueError:
    print("エラーです")

このときは、次のようなエラーになります。

IndentationError: expected an indented block

try: の中に書く処理は、インデントが必要です。

3つ目は、エラー処理を書かずに変換してしまう場合です。

text = input("数字を入力してください: ")
number = int(text)
print(number)

この場合、数字以外を入力すると、次のようなエラーでプログラムが止まります。

ValueError: invalid literal for int() with base 10: 'abc'

入力値が不確かな場合は、tryexcept で対応する形を考える必要があります。

9. 練習用コード

次のコードを practice_error_handling.py として保存して実行してください。

text = input("年齢を入力してください: ")

try:
    age = int(text)
    print("入力された年齢:", age)
except ValueError:
    print("年齢は数字で入力してください")

数字を入力した場合と、文字を入力した場合の両方を試してください。

余裕があれば、age + 5 を表示して、5年後の年齢も出してみてください。

10. この回で理解しておくこと

  • エラーはプログラムで問題が起きたことを示す
  • 実行中のエラーは例外と呼ばれる
  • try にはエラーが起きる可能性のある処理を書く
  • except にはエラーが起きたときの処理を書く
  • int() の変換失敗には ValueError で対応できる

11. まとめ

今回は、エラー処理の基本を確認しました。tryexcept を使うと、入力ミスなどで例外が起きても、分かりやすい処理に切り替えられます。

初学者の段階では、まず int(input(...)) の変換で ValueError が起きることと、それを tryexcept で扱えることを理解してください。

12. 次回予告

次回は、総合演習としてメモを保存するプログラムを作ります。入力、リスト、ファイル書き込み、関数を組み合わせる流れを確認します。

復習してみよう

復習したい方は、こちらもあわせてご覧ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次