Python 3 – Pythonで試してみてください

ザ・ を除いて試してください ステートメントは例外を処理できます。 プログラムを実行すると、例外が発生する場合があります。

例外は、プログラムの実行中に発生するエラーです。 Pythonは、構文エラー(文法エラー)などのエラーについては通知しませんが、代わりに突然停止します。

突然の終了は、エンドユーザーと開発者の両方にとって悪いことです。

緊急停止の代わりに、tryexceptステートメントを使用して問題に適切に対処できます。 例外を適切に処理しないと、緊急停止が発生します。

関連コース: 完全なPythonプログラミングコースと演習

Pythonの例外は何ですか?

Pythonには、エラーを出力する可能性のある組み込みの例外があります。 プログラムの実行中にエラーが発生した場合、それは例外と呼ばれます。

例外が発生した場合は、例外の種類が表示されます。 例外に対処する必要があります。そうしないと、プログラムがクラッシュします。 例外を処理するために、 try-catch ブロックが使用されます。

あなたが以前に見たかもしれないいくつかの例外は FileNotFoundErrorZeroDivisionError または ImportError しかし、もっとたくさんあります。

Pythonのすべての例外は、BaseExceptionクラスから継承されます。 Pythonインタラクティブシェルを開いて次のステートメントを入力すると、すべての組み込み例外が一覧表示されます。

try-except句の考え方は、例外(実行時のエラー)を処理することです。 try-exceptブロックの構文は次のとおりです。

1
2
3
4
try:
<do something>
except Exception:
<handle the error>

のアイデア try-ブロックを除く これは:

  • 試してみてください:キャッチする例外を含むコード。 例外が発生した場合、例外ブロックに直接ジャンプします。

  • を除いて:このコードは実行されるだけです 例外が発生した場合 tryブロックで。 passステートメントのみが含まれている場合でも、tryブロックにはexceptブロックが必要です。

それはと組み合わせることができます そうしないと そして 最終的に キーワード。

  • そうしないと:elseブロックのコードは、tryブロックで例外が発生しなかった場合にのみ実行されます。

  • 最終的に:finallyブロックのコードは、例外が発生したかどうかに関係なく、常に実行されます。

Pythonで例外をキャッチする

try-exceptブロックは、例外を処理できます。 これにより、エラー時にプログラムが突然終了するのを防ぎます。 以下の例では、意図的に例外を発生させています。

1
2
3
4
5
6
try: 
1 / 0
except ZeroDivisionError:
print('Divided by zero')

print('Should reach here')

例外ブロックの後、プログラムは続行されます。 try-exceptブロックがないと、プログラムがクラッシュするため、最後の行に到達しません。

 $ python3 example.py

Divided by zero
Should reach here

上記の例では、特定の例外ZeroDivisionErrorをキャッチします。 次のような例外を処理できます。

1
2
3
4
5
6
try: 
open("fantasy.txt")
except:
print('Something went wrong')

print('Should reach here')

発生する例外のタイプごとに異なるロジックを記述できます。

1
2
3
4
5
6
7
8
9
10
try: 

except FileNotFoundError:

except IsADirectoryError:

except:


print('Should reach here')

関連コース: 完全なPythonプログラミングコースと演習

試してみてください

try-exceptブロックの実際の例を見てみましょう。

プログラムは、数値のユーザー入力を要求します。 代わりに、ユーザーは入力ボックスに文字を入力します。 通常、プログラムはクラッシュします。 しかし、try-exceptブロックを使用すると、適切に処理できます。

ザ・ を除いて試してください ステートメントは、プログラムがクラッシュするのを防ぎ、適切に処理します。

1
2
3
4
5
6
try:
x = input("Enter number: ")
x = x + 1
print(x)
except:
print("Invalid input")

無効な入力を入力すると、プログラムは正常に続行されます。

を除いて試してください

tryexceptステートメントはfinallyキーワードで拡張できます。これは、例外がスローされない場合に実行されます。

1
2
finally:
print("Valid input.")

例外がスローされていない場合、プログラムは実行を継続します。

例外には、ZeroDivisionError、NameError、TypeErrorなどのさまざまな種類があります。 モジュールが独自の例外を定義する場合があります。

try-exceptブロックは、関数呼び出しでも機能します。

1
2
3
4
5
6
7
8
9
def fail():
1 / 0

try:
fail()
except:
print('Exception occured')

print('Program continues')

この出力:

 $ python3 example.py

Exception occured
Program continues

初心者の方は、 それなら私はこの本を強くお勧めします。

最後に試してください

try-exceptブロックには、finally句を含めることができます(オプション)。 finish句は常に実行されます。
したがって、一般的な考え方は次のとおりです。

1
2
3
4
5
6
try:
<do something>
except Exception:
<handle the error>
finally:
<cleanup>

たとえば、ファイルを開いて閉じたい場合は、finally句で行うことができます。

1
2
3
4
5
6
7
8
try: 
f = open("test.txt")
except:
print('Could not open file')
finally:
f.close()

print('Program continue')

他に試す

else句は、例外が発生しない場合にのみ実行されます。 これは、常に実行されるfinally句とは異なります。

1
2
3
4
5
6
7
8
try:
x = 1
except:
print('Failed to set x')
else:
print('No exception occured')
finally:
print('We always do this')

出力:

 No exception occured
We always do this

この方法で多くの種類の例外をキャッチできます。 else句 例外が発生しない場合にのみ実行されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
try:
lunch()
except SyntaxError:
print('Fix your syntax')
except TypeError:
print('Oh no! A TypeError has occured')
except ValueError:
print('A ValueError occured!')
except ZeroDivisionError:
print('Did by zero?')
else:
print('No exception')
finally:
print('Ok then')

例外を発生させる

エラーが発生すると、例外が発生します。 ただし、Pythonでは、キーワードを使用して例外を強制的に発生させることもできます raise

あらゆるタイプの例外が発生する可能性があります。

1
2
3
4
>>> raise MemoryError("Out of memory")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
MemoryError: Out of memory
1
2
3
4
5
>>> raise ValueError("Wrong value")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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
2
3
4
class LunchError(Exception):
pass

raise LunchError("Programmer went to lunch")

上記のコードで、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
2
3
4
5
6
7
8
9
10
11
class NoMoneyException(Exception):
pass

class OutOfBudget(Exception):
pass

balance = int(input("Enter a balance: "))
if balance < 1000:
raise NoMoneyException
elif balance > 10000:
raise OutOfBudget

いくつかのサンプル実行を次に示します。

 $ 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)に配置することをお勧めします。 これは、標準モジュールでも一般的な方法です。

初心者の方は、 それなら私はこの本を強くお勧めします。

演習

  1. 試すことができます-無効なキーボード入力をキャッチするために使用される場合を除きますか?
  2. 試すことができます-ファイルを開くことができない場合にエラーをキャッチすることを除いて?
  3. try-exceptを使用しないのはいつですか?

例をダウンロード

Hope this helps!

Source link