Pythonでのtryの使用
Python では、try
例外処理に使用されるキーワードです。try
ステートメントの構文は次のとおりです。
try:
# 可能会抛出异常的语句块
except ExceptionType1:
# 处理 ExceptionType1 异常的语句块
except ExceptionType2:
# 处理 ExceptionType2 异常的语句块
else:
# 如果没有异常发生,执行的语句块
finally:
# 不管有没有异常,都会执行的语句块
このうちtry
ステートメントブロック内のコードは例外をスローする場合があり、例外がスローされた場合はtry
ステートメントブロック内で中断され、対応するexcept
ステートメントブロックにジャンプして例外を処理します。処理する例外の種類はステートメント ブロックで指定でき、スローされた例外が指定された種類の場合、対応するステートメント ブロック内のコードexcept
が実行されます。except
try
ステートメント ブロックで例外がスローされない場合、else
ステートメント ブロック内のコードが実行されます。finally
ステートメント ブロック内のコードは、例外があるかどうかに関係なく実行されます。
以下は、try
ステートメント ブロックの使用を示す簡単な例です。
try:
x = int(input("请输入一个整数: "))
print("输入的整数是:", x)
except ValueError:
print("输入错误:请输入整数")
else:
print("没有发生异常")
finally:
print("程序执行完毕")
この例では、try
ブロック内のコードはユーザー入力を整数に変換しようとし、変換された結果を出力します。ユーザー入力が整数でない場合、ValueError
例外がスローされ、対応するexcept
ステートメント ブロックにジャンプして例外を処理します。ステートメント ブロックではexcept
、入力が間違っていたことをユーザーに伝えるエラー メッセージを出力します。ステートメント ブロックではelse
、例外が発生しなかったことを示すメッセージを出力します。ステートメントブロックではfinally
、例外が発生したかどうかに関係なく、プログラムの実行が完了したことを示すメッセージを出力します。
カスタム例外
ValueError
これは Python の組み込み例外タイプの 1 つで、通常、関数またはメソッドによって受け取られたパラメーターが無効または不正であることを示します。たとえば、文字列を整数に変換しようとすると、文字列が有効な数値でない場合は例外がスローされますValueError
。
Python では、組み込みの例外タイプに加えて、例外タイプをカスタマイズすることもできます。例外タイプをカスタマイズするには、新しいクラスを定義し、そのException
クラスまたは他の組み込み例外タイプを継承します。たとえば、次のコードはカスタム例外タイプを定義しますMyError
。
class MyError(Exception):
pass
MyError
例外タイプを定義した後、プログラム内でこの例外をスローできます。例えば:
def my_function(x):
if x < 0:
raise MyError("x不能小于0")
else:
return x * 2
try:
result = my_function(-1)
except MyError as e:
print("发生了自定义异常:", e)
else:
print("结果是:", result)
この例では、my_function()
数値を受け取ってx
2 で乗算する という関数を定義します。が負の数の場合x
、例外がスローされMyError
、エラー メッセージが出力されます。try
ステートメント ブロックで を呼び出しましたが、は負の数であるmy_function(-1)
ため、例外がスローされます。ステートメント ブロックでこの例外をキャッチし、エラー メッセージを出力します。ステートメントブロックでは、計算結果を出力します。-1
MyError
except
else
組み込みの例外
Python には多くの組み込み例外タイプがあり、これらを使用してさまざまなタイプのエラーを処理できます。以下は、Python 3.9.6 バージョンに組み込まれている一般的な例外タイプとその説明です。
Exception
: すべての例外の基本クラス。AttributeError
: オブジェクトにはこの属性がありません。EOFError
: 内蔵入力がありません。EOF マークに達しています。FileExistsError
: ファイルまたはディレクトリを作成するときに、そのファイルまたはディレクトリがすでに存在していることが判明しました。FileNotFoundError
: ファイルまたはディレクトリが存在しません。ImportError
: モジュールのインポートに失敗しました。IndexError
: このインデックスはシーケンス内に存在しません。KeyError
: このキーはマップに存在しません。KeyboardInterrupt
: ユーザーが実行を中断しました。MemoryError
:メモリオーバーフローエラーです。NameError
: 未宣言または初期化されたオブジェクト (プロパティなし)。NotImplementedError
: 抽象メソッドが実装されていません。OSError
: ファイルのオープン/読み取りエラーなどのオペレーティング システムのエラー。OverflowError
:数値演算が最大値を超えています。RecursionError
: 再帰のネストが深すぎます。RuntimeError
: 一般的なランタイム エラー。StopIteration
:反復子にはそれ以上の値がありません。SyntaxError
:文法上の誤りです。IndentationError
:インデントエラーです。TabError
:タブとスペースを混ぜます。SystemError
:インタープリタの内部エラー。TypeError
: 不適切な型に演算や機能が適用されています。UnboundLocalError
: 初期化されていないローカル変数にアクセスします。UnicodeError
:Unicode 関連のエラー。ValueError
: 操作または関数が、不正な値の引数を受け取りました。ZeroDivisionError
:除数はゼロです。
これらは Python に組み込まれている例外タイプの一部にすぎないことに注意してください。他にも多くの例外タイプがあり、例外タイプをカスタマイズすることもできます。コードを記述するとき、必要に応じてエラーを処理する適切な例外タイプを選択できます。