モジュールのレッスン (4/4)
エラー処理: 試行/例外
実行時に何か問題が発生した場合 (ゼロによる除算、キーの欠落、
互換性のない型に対する操作) Python は 例外 を発生させます。なし
処理中に例外が発生してプログラムが中断されます。 try / except を使用すると、
それを捕まえて、何をすべきかを決めることができます。
基本的な形
try:
risultato = 10 / 0
except ZeroDivisionError:
risultato = None
risultato # Nonetry:ブロックには、失敗する可能性のあるコードが含まれています。except <ErrorType>:は、そのエラー タイプが発生した場合にのみ実行されます。try内。
例外メッセージのキャッチ
as を使用して、例外オブジェクトを名前にバインドします。
try:
int("non è un numero")
except ValueError as e:
messaggio = str(e)
messaggio # "invalid literal for int() with base 10: 'non è un numero'"複数のタイプを一緒に
try:
valore = dati[chiave]
except (KeyError, IndexError):
valore = None型のタプルは、それらの型 (またはサブクラス) の例外をキャッチします。
完全な構造: try / 例外 / else / 最後に
try:
n = int("42")
except ValueError:
print("not a number")
else:
print(f"parsed: {n}") # executed only if NO exception occurred
finally:
print("always executed") # executed regardless, even on exceptionelse—tryの成功に依存するコードに使用します。そのままにしておいてください 無関係な例外を誤ってキャッチしないように、別々にします。finally— 常に実行する必要があるクリーンアップ (ファイルを閉じる、ファイルを解放する) リソース)。成功時とエラー時の両方で実行されます。
例外の発生: raise
場合によっては、何か問題が発生したことを知らせたいと思う人もいるでしょう。
def diviso(a, b):
if b == 0:
raise ValueError("the divisor cannot be zero")
return a / b遭遇して発生する最も一般的な組み込み例外は次のとおりです。
ValueError— 値の型は正しいですが、受け入れられません (解析など)。TypeError— タイプが間違っています (例:len(42))。KeyError/IndexError— キー/インデックスがありません。ZeroDivisionError— ゼロによる除算。FileNotFoundError、PermissionError— ファイルシステム操作。
try ブロックの else 節とfinally 節
try ブロックでは、次の 2 つの追加句を定義できます。
else:tryブロックが例外を発生させずに完了した場合にのみ実行されます。finally: 例外が発生したかどうかに関係なく、常に実行されます。これは、リソースをクリーンアップする場合 (開いているファイルやデータベース接続を閉じるなど) に最適です。
自分で試してみてください
int('abc') を試行する式を作成します。ValueError が発生した場合は、文字列 'errore' を `result` に割り当てます。それ以外の場合は番号を割り当てます。 「結果」を評価します。
ヒントを表示
int('abc') は ValueError を発生させます。
3 回の試行後に解決策が利用可能になります
復習演習
a/b を返す `divide(a, b)` を定義しますが、b が 0 の場合は 'divisore zero' というメッセージで ValueError を発生させます。次に、try/Except 内で Division(10, 0) を呼び出し、キャッチした例外の文字列を `message` に割り当てます。
ヒントを表示
関数内で ValueError('...') を発生させます。 e として、Except ValueError を使用してキャッチします。
3 回の試行後に解決策が利用可能になります
追加の課題
\`try-excel\` ブロックを作成して、文字列 \`text_val = "abc"\` を整数に変換します。変換によって \`ValueError\` が発生した場合は、\`None\` を \`result\` に割り当てます。それ以外の場合は、変換された数値を割り当てます。最後に、「結果」を評価します。
ヒントを表示
try: result = int(text_val) を使用し、その後に例外 ValueError: result = None を使用します。
3 回の試行後に解決策が利用可能になります