ザ・ を除いて試してください ステートメントは例外を処理できます。 プログラムを実行すると、例外が発生する場合があります。
例外は、プログラムの実行中に発生するエラーです。 Pythonは、構文エラー(文法エラー)などのエラーについては通知しませんが、代わりに突然停止します。
突然の終了は、エンドユーザーと開発者の両方にとって悪いことです。
緊急停止の代わりに、tryexceptステートメントを使用して問題に適切に対処できます。 例外を適切に処理しないと、緊急停止が発生します。
関連コース: 完全なPythonプログラミングコースと演習
Pythonの例外は何ですか?
Pythonには、エラーを出力する可能性のある組み込みの例外があります。 プログラムの実行中にエラーが発生した場合、それは例外と呼ばれます。
例外が発生した場合は、例外の種類が表示されます。 例外に対処する必要があります。そうしないと、プログラムがクラッシュします。 例外を処理するために、 try-catch
ブロックが使用されます。
あなたが以前に見たかもしれないいくつかの例外は FileNotFoundError
、 ZeroDivisionError
または ImportError
しかし、もっとたくさんあります。
Pythonのすべての例外は、BaseExceptionクラスから継承されます。 Pythonインタラクティブシェルを開いて次のステートメントを入力すると、すべての組み込み例外が一覧表示されます。
try-except句の考え方は、例外(実行時のエラー)を処理することです。 try-exceptブロックの構文は次のとおりです。
1 |
try: |
のアイデア try-ブロックを除く これは:
-
試してみてください:キャッチする例外を含むコード。 例外が発生した場合、例外ブロックに直接ジャンプします。
-
を除いて:このコードは実行されるだけです 例外が発生した場合 tryブロックで。 passステートメントのみが含まれている場合でも、tryブロックにはexceptブロックが必要です。
それはと組み合わせることができます そうしないと そして 最終的に キーワード。
-
そうしないと:elseブロックのコードは、tryブロックで例外が発生しなかった場合にのみ実行されます。
-
最終的に:finallyブロックのコードは、例外が発生したかどうかに関係なく、常に実行されます。
Pythonで例外をキャッチする
try-exceptブロックは、例外を処理できます。 これにより、エラー時にプログラムが突然終了するのを防ぎます。 以下の例では、意図的に例外を発生させています。
1 |
try: |
例外ブロックの後、プログラムは続行されます。 try-exceptブロックがないと、プログラムがクラッシュするため、最後の行に到達しません。
$ python3 example.pyDivided by zero
Should reach here
上記の例では、特定の例外ZeroDivisionErrorをキャッチします。 次のような例外を処理できます。
1 |
try: |
発生する例外のタイプごとに異なるロジックを記述できます。
1 |
try: |
関連コース: 完全なPythonプログラミングコースと演習
試してみてください
try-exceptブロックの実際の例を見てみましょう。
プログラムは、数値のユーザー入力を要求します。 代わりに、ユーザーは入力ボックスに文字を入力します。 通常、プログラムはクラッシュします。 しかし、try-exceptブロックを使用すると、適切に処理できます。
ザ・ を除いて試してください ステートメントは、プログラムがクラッシュするのを防ぎ、適切に処理します。
1 |
try: |
無効な入力を入力すると、プログラムは正常に続行されます。
tryexceptステートメントはfinallyキーワードで拡張できます。これは、例外がスローされない場合に実行されます。
1 |
finally: |
例外がスローされていない場合、プログラムは実行を継続します。
例外には、ZeroDivisionError、NameError、TypeErrorなどのさまざまな種類があります。 モジュールが独自の例外を定義する場合があります。
try-exceptブロックは、関数呼び出しでも機能します。
1 |
def fail(): |
この出力:
$ python3 example.pyException occured
Program continues
初心者の方は、 それなら私はこの本を強くお勧めします。
最後に試してください
try-exceptブロックには、finally句を含めることができます(オプション)。 finish句は常に実行されます。
したがって、一般的な考え方は次のとおりです。
1 |
try: |
たとえば、ファイルを開いて閉じたい場合は、finally句で行うことができます。
1 |
try: |
他に試す
else句は、例外が発生しない場合にのみ実行されます。 これは、常に実行されるfinally句とは異なります。
1 |
try: |
出力:
No exception occured
We always do this
この方法で多くの種類の例外をキャッチできます。 else句 例外が発生しない場合にのみ実行されます。
1 |
try: |
例外を発生させる
エラーが発生すると、例外が発生します。 ただし、Pythonでは、キーワードを使用して例外を強制的に発生させることもできます raise
。
あらゆるタイプの例外が発生する可能性があります。
1 |
raise MemoryError("Out of memory") |
1 |
raise ValueError("Wrong value") |
関連コース: 完全なPythonプログラミングコースと演習
組み込みの例外
Pythonの組み込み例外のリストを以下に示します。 このリストは、例外と、それがスローされる(発生する)理由を示しています。
例外 | エラーの原因 |
---|---|
AssertionError | もし assert ステートメントは失敗します。 |
AttributeError | 属性の割り当てまたは参照が失敗した場合。 |
EOFError | の場合 input() 関数がファイルの終わりの状態になります。 |
FloatingPointError | 浮動小数点演算が失敗した場合。 |
GeneratorExit | 発電機の場合は上げる close() メソッドが呼び出されます。 |
ImportError | インポートされたモジュールが見つからない場合。 |
IndexError | シーケンスのインデックスが範囲外の場合。 |
KeyError | キーが辞書に見つからない場合。 |
KeyboardInterrupt | ユーザーが割り込みキー(Ctrl + cまたは削除)を押した場合。 |
MemoryError | 操作のメモリが不足した場合。 |
NameError | 変数がローカルスコープまたはグローバルスコープで見つからない場合。 |
NotImplementedError | 抽象的方法による。 |
OSError | システム操作によってシステム関連のエラーが発生した場合。 |
OverflowError | 算術演算の結果が大きすぎて表現できない場合。 |
ReferenceError | ガベージコレクションされた指示対象にアクセスするために弱参照プロキシが使用されている場合。 |
ランタイムエラー | エラーが他のカテゴリに分類されない場合。 |
StopIteration | 沿って next() イテレータによって返されるアイテムがこれ以上ないことを示す関数。 |
構文エラー | 構文エラーが発生した場合はパーサーによって。 |
IndentationError | 間違ったインデントがある場合。 |
TabError | インデントが一貫性のないタブとスペースで構成されている場合。 |
システムエラー | インタプリタが内部エラーを検出した場合。 |
SystemExit | 沿って sys.exit() 関数。 |
TypeError | 関数または操作が誤ったタイプのオブジェクトに適用された場合。 |
UnboundLocalError | 関数またはメソッドでローカル変数が参照されているが、その変数に値がバインドされていない場合。 |
UnicodeError | Unicode関連のエンコードまたはデコードエラーが発生した場合。 |
UnicodeEncodeError | エンコード中にUnicode関連のエラーが発生した場合。 |
UnicodeDecodeError | デコード中にUnicode関連のエラーが発生した場合。 |
UnicodeTranslateError | 翻訳中にUnicode関連のエラーが発生した場合。 |
ValueError | 関数が正しい型であるが不適切な値の引数を取得した場合。 |
ZeroDivisionError | 除算またはモジュロ演算の第2オペランドがゼロの場合。 |
Pythonには多くの標準タイプの例外がありますが、必ずしも目的にかなうとは限りません。
プログラムには、独自のタイプの例外を含めることができます。
ユーザー定義の例外を作成するには、Exceptionから継承するクラスを作成する必要があります。
1 |
class LunchError(Exception): |
上記のコードで、LunchErrorという名前のユーザー定義の例外を作成しました。 エラーが発生した場合は、この新しい例外を発生させることができます。
カスタムエラーを出力します:
$ python3 example.py
Traceback (most recent call last):
File “example.py”, line 5, in
raise LunchError(“Programmer went to lunch”)
main.LunchError: Programmer went to lunch
プログラムには、多くのユーザー定義の例外があります。 以下のプログラムは、新しいプロジェクトの資金に基づいて例外をスローします。
1 |
class NoMoneyException(Exception): |
いくつかのサンプル実行を次に示します。
$ python3 example.py
Enter a balance: 500
Traceback (most recent call last):
File “example.py”, line 10, in
raise NoMoneyException
main.NoMoneyException
$ python3 example.py
$ python3 example.py
Enter a balance: 100000
Traceback (most recent call last):
File “example.py”, line 12, in
raise OutOfBudget
main.OutOfBudget
すべてのユーザー定義の例外を別のファイル(exceptions.pyまたはerrors.py)に配置することをお勧めします。 これは、標準モジュールでも一般的な方法です。
初心者の方は、 それなら私はこの本を強くお勧めします。
演習
- 試すことができます-無効なキーボード入力をキャッチするために使用される場合を除きますか?
- 試すことができます-ファイルを開くことができない場合にエラーをキャッチすることを除いて?
- try-exceptを使用しないのはいつですか?
Hope this helps!
Source link