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

Python

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

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

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

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

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

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

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

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

profile_icon

【Python歴】10年 x 【営業マン歴】11年

HP作成、社内システムの構築、コンサルティング

Pythonベースのフレームワーク 「Django」を使って下記のようなサイトを作っています!

日報アプリ
当ブログで一から開発方法を解説している日報アプリ(デモ版)です
ツールアプリ
当ブログで紹介したPythonアプリのWeb版です。DjangoAPIとReactで開発。随時更新中です。

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. 比較的大きなプロジェクトの場合

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

Pythonでホームページが作れるのをご存知でしょうか?

当ブログでは、PythonをベースとしたDjangoフレームワークを使って一からホームページを作成、公開するまでを解説しているブログになります

最終的には、下記リンク先のような日報アプリを開発、公開できるように進めていきます

https://nippo.itc-app.site/
ようこそ!簡易日報アプリ「D-Repo」へ!こちらは無料で使える日報アプリのデモサイトになります!「Webアプリはとてもカンタンで便利!」を感じてみよう!

興味のある方はシリーズの記事が一覧となっている↓のページをご覧ください

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!
タイトルとURLをコピーしました