複数の例外の処理
CoddyのPythonジャーニー「Logic & Flow」セクションの一部 — レッスン 65/78。
Pythonでは、個別の except ブロックで異なる種類の例外を処理できます。これにより、発生した特定のエラーに基づいて異なる対応をすることが可能になります。
基本的な try-except 構造から始めましょう:
try:
# 例外が発生する可能性のあるコード
pass
except Exception as e:
# あらゆる例外を処理する
pass複数の例外を処理するには、特定の except ブロックを追加します:
try:
number = int(input("Enter a number: "))
result = 10 / number
print(result)
except ValueError:
print("That's not a valid number!")
except ZeroDivisionError:
print("Cannot divide by zero!")単一の except ブロックで複数の例外タイプをキャッチすることもできます:
try:
# 何らかのコード
pass
except (ValueError, TypeError):
print("Invalid input type!")exceptブロックの順序は重要です。常に、より具体的な例外をより一般的な例外よりも前に配置するようにしてください。
チャレンジ
簡単process_data という名前の関数を作成してください:
- 潜在的なデータを表す文字列の入力を受け取ります
- それを整数に変換しようと試み、その後、100をその整数で割った値を計算します
- 結果を返します
- 少なくとも3つの発生し得る例外を処理します:
- 入力が整数に変換できない場合の
ValueError("Input must be a number!" と出力します) - 入力が 0 の場合の
ZeroDivisionError("Cannot divide by zero!" と出力します) - その他の例外に対する汎用ハンドラ("An unexpected error occurred!" と出力します)
- 入力が整数に変換できない場合の
チートシート
複数の except ブロックを使用して、異なる種類の例外を処理します。
try:
number = int(input("Enter a number: "))
result = 10 / number
print(result)
except ValueError:
print("That's not a valid number!")
except ZeroDivisionError:
print("Cannot divide by zero!")単一の except ブロックで複数の例外タイプをキャッチします。
try:
# 何らかのコード
pass
except (ValueError, TypeError):
print("Invalid input type!")except ブロックの順序では、常により具体的な例外をより一般的な例外の前に配置してください。
自分で試してみよう
def process_data(input_string):
try:
# 入力文字列を整数に変換してみる
# 100を入力値で割った値を計算する
# 結果を返す
except ValueError:
# 入力を整数に変換できない場合を処理する
except ZeroDivisionError:
# 入力がゼロの場合を処理する
except:
# その他の予期しない例外を処理する
return Noneこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。