例外処理
- NameError
- 例外TypeError
- 例外処理(TRY ...を除きます)
- スローされる例外(レイズ)
- finally節
プログラムの実行中に発生したエラーは異常です。このようのpython3の構文で使用Python2ユニーク発生するなどのエラーメッセージを、関連する各例外のショーはSyntaxError
、最初の複数行が誤ってスペースを打つ生成しますIndentationError
。
- NameError
時に未定義の変数アクセスNameErrorが発生します。
例えば、
>>> print(kushal)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'kushal' is not defined
最後の行は、エラーの詳細が含まれ、残りの行は、(例外を発生させたか、どのような)それが起こったのかの詳細を表示します。
- 例外TypeError
不適切な操作または機能が、オブジェクトタイプの開始剤に適用した場合、一般的な例は、整数加算と文字列であるです。
>>> print(1 + "kushal")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
- 例外処理
使用するtry...except
すべての例外を処理するためにブロックを。このような基本的な構文は次のとおりです。
try:
statements to be inside try clause
statement2
statement3
...
except ExceptionName:
statements to evaluated in case of ExceptionName happens
これは次のように動作します:
-
まず、
try
句(中try
とexcept
キーワードの間の部分)。 -
例外が発生しない場合、
except
句try
の文の後は無視終了します。 -
場合は
try
例外が実行句中に発生し、その後、節の残りの部分は無視されます。
例外が一致する場合except
、例外タイプのキーワードが指定され、対応する実行except
句。その後に進んtry
文の後のコード。 -
例外が発生した場合は、
except
無分岐マッチング句は、それがに渡されるtry
声明。
それでも、対応する最後の文の処理が見つからない場合は、メッセージが表示されますと、未処理の例外と実行が停止しています。
栗:
>>> def get_number():
... "Returns a float number"
... number = float(input("Enter a float number: "))
... return number
...
>>>
>>> while True:
... try:
... print(get_number())
... except ValueError:
... print("You entered a wrong value.")
...
Enter a float number: 45.0
45.0
Enter a float number: 24,0
You entered a wrong value.
Enter a float number: Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "<stdin>", line 3, in get_number
KeyboardInterrupt
まず、私は、適切な浮動小数点値を入力し、インタプリタは、出力値を返します。
私は、カンマ区切り値を入力投げる場合ValueError
、例外except
の句キャッチを、エラーメッセージをプリントアウトします。
私は三回押すCtrl + C
につながった、KeyboardInterrupt
プログラムの実行が中断されるように例外を、例外は、ブロック以外でキャッチされていません。
空のexcept
ステートメントは、すべての例外をキャプチャすることができます
>>> try:
... input() # 输入的时候按下 Ctrl + C 产生 KeyboardInterrupt
... except:
... print("Unknown Exception")
...
Unknown Exception
- 例外をスロー
raise文を使って例外をスローします。
>>> raise ValueError("A value error happened.")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: A value error happened.
あなたはそれらをキャッチするために、他の普通のような異常をキャプチャすることができます。
>>> try:
... raise ValueError("A value error happened.")
... except ValueError:
... print("ValueError in our code.")
...
ValueError in our code.
- クリーンアップ行動の定義
try
文は、他のオプションがあるfinally
句が実行されなければならないどのような場合に定義することを意図しています。例えば:
>>> try:
... raise KeyboardInterrupt
... finally:
... print('Goodbye, world!')
...
Goodbye, world!
KeyboardInterrupt
Traceback (most recent call last):
File "<stdin>", line 2, in ?
例外が発生したかどうかは、finally
プログラムの休暇中句はtry
、後に実行されるように確信しています。ときにtry
文は起きていないexcept
で、例外トラップを(またはそれがexcept節や他の起こり)finally
、それの実装が再スローされます後に句。
実際のアプリケーション・シナリオでは、finally
句は関係なく、彼らはもちろん間違ったのであるかどうかの、外部リソース(ファイルやネットワーク接続など)を放出するのに便利です。
で述べたようにwith
ある文で、try-finally
使用して、ブロックの省略表現with
ファイルを確実にするためのステートメントを常に閉じています。
異常は何?実際には、異常类
。
出典:
実験棟