LoginSignup
7
8

More than 3 years have passed since last update.

Pythonチュートリアル(8章)の内容を箇条書きでまとめた

Last updated at Posted at 2020-04-20

前の記事:Pythonチュートリアル(7章)の内容を箇条書きでまとめた(作成中)

はじめに

Python3 エンジニア認定基礎試験対策として、Pythonチュートリアル(書籍)の内容を暗記しやすい箇条書きにまとめた自分用メモです。

参考資料

Pythonチュートリアル: https://docs.python.org/ja/3/tutorial/
8章: https://docs.python.org/ja/3/tutorial/errors.html
書籍: https://www.oreilly.co.jp/books/9784873117539/

"8章 エラーと例外"

  • Python3 エンジニア認定基礎試験の配点
    • 4 / 40問(10.0%) ☆☆★★★(重要度:中-)
  • テーマ
    • 構文エラー
    • 例外(ビルトイン例外とユーザー定義例外)
    • 例外処理(try, except, else, finally)
    • raise文

8.1 構文エラー

  • 構文エラー (SyntaxError)は、パーサ(構文解釈器)によって実行前に検知される。
  • パーサは構文エラーが最初に見つかった場所を小さな矢印で示す。
    • エラーの原因は矢印より前のトークンにある。
    • ファイル名と行番号も表示される。

8.2 例外

  • 例外 (exception) は実行中に検知される。以下の二種類がある。
    • ビルトイン例外 ... Pythonが用意している組み込み例外。
    • ユーザー定義例外 ... ユーザーが自分で定義した例外。
  • 例外には様々な型があり、型はメッセージに記されている。
    • ビルトイン例外では、型とメッセージに出る名前は必ず一致する。
    • ユーザー定義例外では、一致は任意。
  • 例外のほとんどはプログラムで処理されず、結果はエラーメッセージにあらわれる。
    • エラーメッセージ前半には、例外が起きたコンテキストがスタック・トレースバックの形で示される。
      • 標準入力から読み込んだ行については表示しない。
    • エラーメッセージ最終行には、何が起きたかが書かれる。
      • 行の後半に例外の型と原因の詳細が示される。

8.3 例外の処理

  • try文により、選択した例外を処理することができる。
    try文は以下で構成される。try節とexcept節は必須で、else節とfinally節は省略可能。
    • try節
      try: の下のブロック。try文の一番上に書く。
      例外が送出されるかも知れない処理を書く。
    • except節
      except [例外名] [as 変数名]: の下のブロック。try節の下に書く。
      例外が送出された際の処理を書く。
      • 複数のexcept節を書くことも可能。
      • 例外名を省略した場合、全ての例外をキャッチできる。
      • as 変数名 を記載した場合、変数に例外のインスタンスが代入される。
        • 引数はargs属性に格納される。
        • 例外インスタンスには __str()__ メソッドが定義されているため、args属性を参照せずに直接 print(インスタンス名) でも表示できる。
      • 例外をタプルで列挙することにより、一つのexcept節で複数の例外をキャッチすることも可能。
    • else節
      else: の下のブロック。except節の下に書く。
      try節で例外が送出されなかった場合の処理を書く。
    • finally節
      finally: の下のブロック。try文の一番下に書く。
      try文の最後のクリーンアップ処理を書く。
  • try文の実行順序は以下の通り。
    • try節が最初に実行される。
    • try節中で例外が送出されなければexcept節がスキップされる。
      • else節があれば、それを実行する。
    • try節の中で例外が送出されると、try節の残りの処理とelse節はスキップされる。
      • 例外と一致するexcept節がある場合、それを実行する。
      • 例外と一致するexcept節がない場合、上位のtry文があればそこへ例外を再送出する。
        • finally節があれば、再送出前に実行される。
      • 上位のtry文もない場合、未処理例外 (unhandled exception) メッセージを表示して処理を終了する。
      • try節から直接的・間接的にコールされた関数内で発生した例外もexcept節の処理対象になる。
    • finally節があれば、例外の送出の有無を問わず実行してtry文を終了する。

8.4 例外の送出

  • raise文により、プログラム上で指定した例外を強制的に送出することもできる。
    • raise [例外] の形式で書く。
    • 指定する例外は、例外クラスでも、例外インスタンスでも可。
    • except節の中で引数を指定せず raise とのみ書いた場合、キャッチした例外を最送出する。

8.5 ユーザー定義例外

  • 独自の例外クラスを作成して扱うこともできる。
    • 例外クラスは、通常はExceptionクラスから派生したクラスにするべきである。
    • 例外クラスの名前は、標準例外と同様に "~Error" という名前にするべきである。
  • 通常のクラスと同様に、例外クラスでもメソッドのオーバーライドなどができるが、あまり複雑なことは普通やらない。
  • いろいろなエラーを送出するモジュールを書く際は、最初に例外のベースクラスを定義して、個別のエラーはそのサブクラスとして扱うことが多い。

8.6 クリーンアップ動作の定義

  • クリーンアップ処理はfinally節 (->8.3 例外の処理) で定義する。
    • 外部リソースの開放など、例外の有無にかかわらず実行したい処理に使う。
  • except節で対応していない例外があった場合、finally節の処理を実行してから再送出する。
  • try文内の他の節からbreakやcontinueやretuenなどで抜ける際にもfinally節は実行される。 #8.6.1 オブジェクトに定義してあるクリーンアップ動作
  • オブジェクトの中には、不要になった際のクリーンアップ処理が定義されているものもある。
  • オブジェクトの処理にwith文を使うと、使用後すぐにPythonが適切な方法でクリーンアップしてくれる。

次の記事:Pythonチュートリアル(9章)の内容を箇条書きでまとめた(作成中)

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8