• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

AI活用エンジニアへの道

生成AI時代のエンジニアの生き方を考えるメディア(作成途中)

  • コラム
  • 生成AI
  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • プロフィール
Home / プログラミング / Python / Pythonのtry~exceptと例外処理と例外の詳細表示、raise,assert,独自の例外の定義方法まとめ

Pythonのtry~exceptと例外処理と例外の詳細表示、raise,assert,独自の例外の定義方法まとめ

1 Pythonの例外処理の基本(try,except)
2 Pythonの例外処理の応用(else,finally)
3 raiseで例外を発生させる
4 関連記事

Pythonの例外処理の基本(try,except)

pythonの例外処理はtry,exceptを利用する。
プログラムの文法的には間違いないが実行時に問題を起こすエラーで、そのエラーが発生した場合に代替処理を用意するのが例外処理と言う。
代表的なものとして以下のようなものがある

FileNotFoundError プログラムで指定されたファイルが見つからないエラー
IndexError 配列などで指定したインデックスに値が存在しないエラー
TypeError 型に関するエラー
ZeroDivisoinError 0で割ろうとしたことによるエラー

以下のように記述する

Example

  • 例外処理(try...except)の基本的な書き方

try: # try+:(コロン)
    num = 10.0 / 0 # tryの後に、インデント(空白4文字)を入れると例外が発生しないかチェック
except ZeroDivisionError as e: # tryの中でZeroDivisionError(数値を0で割った場合に起こる例外)、exceptの中を実行
    print("例外発生") # 例外が発生した場合実行
    print('{} : {}'.format(type(e),e)) # 例外が発生した場合、<class 'ZeroDivisionError'> : float division by zeroのようにどの例外か表示
  • 例外の結果を詳細に表示したい場合

from traceback import format_tb # tracebackモジュールからformat_tbクラスをインポート

try:
    num = 10.0 / 0
except ZeroDivisionError as e:
    print('{} : {}'.format(type(e),e))
    print(format_tb(e.__traceback__)) # format_tb(e.__traceback__)をprintするとどのファイルのどの行で例外が発生したか表示する

Pythonの例外処理の応用(else,finally)

pythonの例外処理を複数つなげることもできる

Example

  • exceptを複数繋げて記述

fruits = ['apple', 'orange', 'grape']
count = 12

try:
    fruit = fruits[2]
    print(fruit + count)
except IndexError as e: # 配列に存在しないインデックスを指定した場合の例外
    print('{} : {}'.format(type(e),e))
except TypeError as e: # 文字列型+数値型等、型の異なる計算した場合の例外
    print('{} : {}'.format(type(e),e))
except Exception as e: # 全ての例外をキャッチ
    print('{} : {}'.format(type(e),e))

else/finallyの利用方法
  • elseは例外が発生しなかった場合に実行され、例外が発生した場合には実行されない
  • finallyは例外が発生した場合にも、発生しなかった場合にも実行される

Example

  • else, finallyの利用方法

try:
    num = 12 / 2
except ZeroDivisionError as e: # 数式で0で除算を行った場合の例外(この例では実行されない)
    print('{} : {}'.format(type(e),e))
else:
    print("elseが実行されました") # elseは例外が発生しなかった場合のみ実行される(この例では実行される)
finally:
    print("finallyが実行されました") # finallyは例外の発生有無に関係なく実行される(この例では実行される)

raiseで例外を発生させる

pythonでは、例外を発生させることもできる。

以下のようにraise('メッセージ')を利用する

Example

  • raiseの利用方法

def devide(a, b): # 関数の定義
    if(b == 0):
        raise ZeroDivisionError('bに0を設定しないでください') # raiseをすると呼び出し元にメッセージと例外を返す
    else:
        return a / b
try:
    result = devide(10,0) # 関数を呼び出すと、ZeroDivisionErrorが返る
except ZeroDivisionError as e:
    print('{} : {}'.format(type(e), e)) # ZeroDivisionErrorが発生。<class 'ZeroDivisionError'> : 「bに0を設定しないでください」と表示

assertは、テストなどで値を確認したい時に利用する。
assert 条件式、条件式がFalseの時に表示するメッセージ

のように記述し、条件式が正しいかどうかテストする。

Example

  • raiseの利用方法

def test_marumaru(small, big):
    try:
        assert small > big, "smallはbigより小さくないといけません" # small>bigの場合、メッセージを表示
    except AssertionError as e:
        print("テスト終了")

例外の独自定義は、Exceptionクラスを継承したクラスを作成することができる

Example

  • raiseの利用方法

class MyException(Exception): # Exception継承したクラスを作成
    pass

raise MyException('メッセージ') # 例外を発生させたい場所でraiseを利用する

関連記事

Pythonの型ヒント:コレクション型とOptional型の使い方
Pythonの型ヒント:コレクション型とOptional型の…
Python型ヒントについて、変数と関数の引数と戻り値に付与する基本的な書き方について
Python型ヒントについて、変数と関数の引数と戻り値に付与…
【まとめ】よく使うLinuxのショートカット11選
【まとめ】よく使うLinuxのショートカット11選
覚えておくべきLinuxコマンド50選
覚えておくべきLinuxコマンド50選
FlaskでFormを用いてPOSTリクエストを行い、送信された値を取得する
FlaskでFormを用いてPOSTリクエストを行い、送信さ…
Flaskでabortを用いてHTTPException例外を強制的に発生させる
Flaskでabortを用いてHTTPException例外…

Primary Sidebar

人気記事

  • 1
    ITエンジニアとしてスキルを高めるためのUdemy講…
  • 2
    PyCharm,IntelliJのおすすめプラグイン一覧
  • no image 3
    Python未経験だが、フリーランスの案件に採用さ…
  • 4
    アメリカのシリコンバレーでプログラミングを無…

特集記事

  • 1
    Cursorの使用のポイントとコツ(コード補完、イ…
  • 2
    ITエンジニアとしてスキルを高めるためのUdemy講…

目次

1 Pythonの例外処理の基本(try,except)
2 Pythonの例外処理の応用(else,finally)
3 raiseで例外を発生させる
4 関連記事
StartCode ロゴ
AI時代のエンジニアを最速で育てる
法人向けIT研修で即戦力を育成しています。詳しくはお問い合わせください。
▶ 詳細はこちら
Python講座
【Udemy】Python入門講座(0からPythonの基礎を体系的に学んで、生成AIでバイブコーディング)
受講生3000人ほどの人気講座。<strong>Pythonの基礎から生成AI活用</strong>...
詳細 ▶

Footer

利用規約