0Pricing
Python Academy · レッスン

例外を理解する

例外とは何か、Python がどのように例外を発生させるかを学びます。

「例外を理解する」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

はじめに

例外は、実行時のエラーを通知して処理するための Python の仕組みです。

例外とは何ですか

例外は、プログラムの通常の処理の流れを妨げるイベントです。Python は、ゼロ除算などのエラーが発生すると例外を発生させます。
# 1 / 0  # raises ZeroDivisionError
print('exceptions demo')

例外の階層

すべての例外は BaseException を継承します。ユーザーが扱うことの多い例外の大半は Exception を継承します。具体的な型には ValueError、TypeError、KeyError などがあります。
print(issubclass(ValueError, Exception))
print(issubclass(Exception, BaseException))

よく使う組み込み例外

TypeError は型が間違っている場合、ValueError は型は正しいが値が間違っている場合、KeyError は辞書のキーがない場合、IndexError はリストのインデックスが範囲外の場合、AttributeError は属性が存在しない場合に発生します。
# Examples:
# int('abc')       -> ValueError
# d['missing']     -> KeyError
# [1,2][9]         -> IndexError
print('common exceptions')

トレースバック

例外が処理されないと、Python はトレースバックを出力します。これは、最下部(直近の呼び出し)から最上部へたどる呼び出しスタックです。読み方を覚えましょう。
def f(): return 1/0
# f()  # shows traceback
print('traceback demo')

例外オブジェクト

各例外にはメッセージが含まれています。str(e) または e.args で説明を取得できます。except 内では、except ValueError as e: のようにアクセスします。
try:
    int('abc')
except ValueError as e:
    print(type(e).__name__, e)

複数の型を捕捉する

except (TypeError, ValueError): と記述すると、1つの節でどちらかの型を捕捉できます。
def parse(x):
    try:
        return int(x)
    except (TypeError, ValueError):
        return None
print(parse('abc'), parse(None))

ExceptionGroup(3.11以降)

Python 3.11 では、複数の例外が同時に発生した場合の ExceptionGroup が追加され、except* 構文で処理できます。
# Python 3.11+:
# try: ...
# except* ValueError as eg:
#     print(eg.exceptions)
print('exception group demo')

警告と例外の違い

import warnings; warnings.warn('msg') は例外を発生させずに警告を出します。非推奨機能や軽微なエラーに使用します。
import warnings
warnings.warn('This is deprecated', DeprecationWarning)
print('warning issued')

sys.exc_info()

except ブロック内では、sys.exc_info() が (type, value, traceback) を返します。例外の詳細全体をログに記録する場合に便利です。
import sys
try:
    1/0
except:
    exc_type, exc_val, _ = sys.exc_info()
    print(exc_type, exc_val)

例外の連鎖

raise NewError('msg') from original_exc は例外を連鎖させます。__cause__ 属性によって例外同士が関連付けられます。
try:
    int('abc')
except ValueError as e:
    raise RuntimeError('parse failed') from e

クイックチェック

存在しないキーで辞書にアクセスすると、どの例外が発生しますか?

まとめ

例外は BaseException を継承します。トレースバックは下から上へ読みます。except as e で捕捉します。よく使う型には ValueError、TypeError、KeyError、IndexError、AttributeError があります。

次へ進みましょう

よくできました。次のレッスンに進んで、学習を続けましょう。

よくある質問

「例外を理解する」レッスンは無料ですか?

はい。「例外を理解する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「例外を理解する」で何を学びますか?

例外とは何か、Python がどのように例外を発生させるかを学びます。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「例外を理解する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 例外を理解する
  2. try / except / else / finally
  3. 例外の発生と再発生
  4. カスタム例外クラス
← Python Academyに戻る