【Python try】 例外処理の書き方|基本を徹底的に解説

Python

(最終更新月:2021年12月)

✓当記事はこんな方に向けて書かれております

「Python try文の使い方がわからない!」

「例外についても詳しく知りたい!」

「そもそも例外処理って必要なの??」

✓当記事の内容はこちらです

  • Python try文 例外処理の書き方|基本を徹底に解説
  • 主な例外 7種をまとめました
  • 例外処理を使う便利な場面 3選

つまり、当記事をお読みいただくことで、Pythonの例外処理について基本はすべて網羅できます

筆者プロフィール

筆者プロフィールアイコン

【現職】プロマネ/システムプランニング

【副業】ブログ(月間7万PV)/YouTube/Web・アプリ制作

【元】外資系金融機関の営業

コミュニケーション × ビジネススキル × 文章力 × プログラミングスキルを活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

ChatGPTでLINEボット

【今なら無料】ChatGPTでLINEボットを作りました!

友だち追加

Python try文 例外処理の書き方|基本を徹底的に解説

構造

try文は下記の構造となっています

try:
    行いたい処理
except:
    エラーが発生した場合の処理

exceptで特定のエラーに限定することも可能です

try:
    行いたい処理
except エラー名 as 変数:
    エラーが発生した場合の処理

実例を見ていきましょう

実例

関数で数字を2つ受け取り、割り算をしていきます

def divide2numbers(a,b):
    try:
        print(a/b)
    except ZeroDivisionError as zero_e:
        print("ゼロで割ることはできません:", zero_e)
    except TypeError as type_e:
        print("正しい値を入力してください:", type_e)

解説

try以下の「print(a/b)」が行いたい処理のコードです

エラーを2つ指定してます

  1. ZeroDivisionError
  2. TypeError

ZeroDivisionErrorはゼロで割ってしまった場合に起こるエラーです

TypeErrorはint型以外が引数に代入された場合起こります

基本的な使い方は、以上ですが、「else」「finally」についても知っておくと便利です

else, finally

try:
  行いたい処理
except:
    エラーが発生した場合の処理
else:
    try文がエラーなく終了した場合のみ実行
finally:
    エラーの有無に関わらず実行

else, finallyの実例

def divide2numbers(a,b):
    try:
        print(a/b)
    except ZeroDivisionError as zero_e:
        print("ゼロで割ることはできません:", zero_e)
    except TypeError as type_e:
        print("正しい値を入力してください:", type_e)
    else:
        print("エラーはありませんでした")
    finally:
        print("プログラム終了")

解説

エラー発生がなく、正常に終了した場合、

>>> divide2numbers(6,3)
2.0
エラーはありませんでした
プログラム終了

「else」も「finally」もすべて実行されます

エラーが発生した場合、

>>> divide2numbers(6, "3")
正しい値を入力してください: unsupported operand type(s) for /: 'int' and 'str'
プログラム終了

「else」は実行されずfinallyのみ実行されました

主な例外 7種をまとめました

try文を作成する場合、「どんな例外があるか」をおさえておくととても便利です

下記の7つは完璧に覚える必要はありませんが、「こんなのあるんだ!」程度に知っておきましょう

ValueError

予期している値と違う場合に発生するエラーです

【例】

>>> float("three")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'three'

TypeError

予期している型と違う場合に発生するエラーです

【例】

>>> 3 + "4"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

AttributeError

指定した属性が存在しない場合に発生するエラーです

【例】

>>> num = 3
>>> num.lower()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'lower'

NameError

存在しない変数などを指定した場合などに発生するエラーです

【例】

>>> test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'test' is not defined

ZeroDivisionError

割り算の際にゼロで割ってしまった場合に発生するエラーです

【例】

>>> 5/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

IndexError

リストなどのオフセットを存在しない値で指定した場合などに発生するエラーです

【例】

>>> num_list = [1,2,3]
>>> num_list[4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

KeyError

辞書型のオブジェクトで存在しないキーで値を取り出した場合に発生するエラーです

【例】

>>> article = {"pk": 1, "title":"Pythonとは?"}
>>> article["content"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'content'

例外処理を使う便利な場面 3選

エラー処理は下記のような場面で使用するととても便利です

引数を受け取る関数を使用している場合

関数内でエラーが発生すると、プログラム全体が強制的にストップしてしまいます

try文でプログラム全体のフリーズを防止できます

エラー回避のためにif文をいくつも記述している場合

try文はエラーの種類ごとの記述で済ませることができます

if文で起こりうるエラー全ての条件分岐を記述するのはコードが膨大になってしまう可能性がありますので、できるだけ避けましょう

比較的大きなプロジェクトの場合

エラー発生がその後の処理にも影響してしまうので、エラー発生の可能性がある場合はtry文を使っておきましょう

まとめ

以上でPythonのtry文について基本を解説してきました

当記事をまとめていきます

【try文の構成】

try:
  行いたい処理
except:
    エラーが発生した場合の処理
else:
    try文がエラーなく終了した場合のみ実行
finally:
    エラーの有無に関わらず実行

ただし、「else」「finally」は不要な場合は割愛可能です

例外は様々なものがありますが、主に出くわすであろう7つご紹介しました

  1. ValueError
  2. TypeError
  3. AttributeError
  4. NameError
  5. ZeroDivisionError
  6. IndexError
  7. KeyError

すべて覚えておく必要はありませんが、頭の片隅に入れておくといざという時に便利です

こんなtry文は下記の時に使うと効果を発揮します

  1. 引数を受け取る関数を使用している場合
  2. エラー回避のためにif文をいくつも記述している場合
  3. 比較的大きなプロジェクトの場合

当記事をきっかけに使いこなして頂ければ幸いです

タイトルとURLをコピーしました