0Pricing
Python Academy · レッスン

try / except / else / finally

さまざまな状況に対応できる例外処理ブロックを構成します。

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

はじめに

Python の try/except/else/finally を使うと、エラー処理と後片付けを完全に制御できます。

基本的な try/except

try: risky_code() except ExceptionType: handle() と記述すると、Python はその例外型が発生した場合にだけ except ブロックを実行します。
try:
    x = int('abc')
except ValueError:
    print('not a number')

例外オブジェクトの捕捉

except ValueError as e: と記述すると、例外が e に割り当てられます。str(e) または e.args でメッセージを取得できます。
try:
    int('oops')
except ValueError as e:
    print(f'Error: {e}')

複数の例外の捕捉

except (TypeError, ValueError) as e: と記述すると、どちらかの型を捕捉できます。
for val in ['abc', None, 42]:
    try:
        print(int(val))
    except (TypeError, ValueError) as e:
        print(f'skipping {val!r}: {e}')

裸の except(避けてください)

except:(型の指定なし)は、KeyboardInterrupt や SystemExit を含むすべての例外を捕捉します。ほとんどの場合は誤りなので、必ず型を指定してください。
try:
    risky = 1/0
except ZeroDivisionError:
    print('division error')  # specific

複数の except 節

複数の except ブロックを記述し、それぞれで異なる型を処理できます。Python は上から順に試します。
def process(val):
    try:
        return 10 / int(val)
    except ValueError:
        print('not a number')
    except ZeroDivisionError:
        print('division by zero')
process('abc')
process('0')

else 節

try/except/else では、例外が1つも発生しなかった場合にだけ else が実行されます。成功時に実行するコードに使用します。
try:
    x = int('42')
except ValueError:
    print('bad input')
else:
    print('parsed:', x)

finally 節

finally は必ず実行されます。try が成功した後、except の後、return や break の後でさえも実行されます。後片付けに最適です。
def read_file(path):
    f = None
    try:
        f = open(path)
        return f.read()
    except FileNotFoundError:
        return None
    finally:
        if f: f.close()
print(read_file('/nonexistent'))

return と finally

return と finally の両方がある場合、finally が先に実行されますが、finally 内の return 値が優先されます。注意してください。
def demo():
    try:
        return 'try'
    finally:
        return 'finally'  # overrides!
print(demo())

ネストした try ブロック

try ブロックはネストできます。内側の except で捕捉されなかった内部の例外は、外側へ伝播します。
try:
    try:
        x = 1/0
    except ValueError:
        print('inner')
except ZeroDivisionError:
    print('outer caught it')

例外のログ記録

import logging; logging.exception('msg') は完全なトレースバックをログに記録します。本番コードで特に便利です。
import logging
try:
    1/0
except ZeroDivisionError:
    logging.exception('Caught an error')

クイックチェック

例外が発生したかどうかにかかわらず実行される節はどれですか?

まとめ

try/except はエラーを捕捉します。else は成功時に実行されます。finally は常に実行されます(後片付け)。具体的な型を捕捉し、裸の except は避けてください。例外にアクセスするには as e を使います。

次へ進みましょう

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

よくある質問

「try / except / else / finally」レッスンは無料ですか?

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

「try / except / else / finally」で何を学びますか?

さまざまな状況に対応できる例外処理ブロックを構成します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「try / except / else / finally」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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