ホームページ >バックエンド開発 >Python チュートリアル >Pythonの例外処理例を詳しく解説

Pythonの例外処理例を詳しく解説

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-16 08:44:581518ブラウズ

1. 異常とは何ですか?
例外とは、プログラムの実行中に発生し、プログラムの通常の実行に影響を与えるイベントです。
一般に、Python がプログラムを正常に処理できない場合に例外が発生します。
例外は、エラーを表す Python オブジェクトです。
Python スクリプトで例外が発生した場合、それをキャッチして処理する必要があります。そうしないと、プログラムの実行が終了します。
2. 例外処理
例外をキャッチするには、try/Except ステートメントを使用できます。
try/Except ステートメントは、try ステートメント ブロック内のエラーを検出するために使用され、Except ステートメントが例外情報を取得して処理できるようにします。
例外が発生したときにプログラムを終了したくない場合は、try でキャッチしてください。

例外構文:
以下は、単純な try....excel...else の構文です:

コードをコピー コードは次のとおりです:
try:
#他のコードを実行
を除く:
'name' 例外は
以外、:
> > #例外が発生しない場合

try の動作原理は、try ステートメントがが開始されると、Python は現在のプログラムのコンテキストでそれをマークし、例外が発生したときに返せるようにします。ここでは、try 句が最初に実行され、次に何が起こるかは、実行中に例外が発生するかどうかによって異なります。
try 後のステートメントの実行時に例外が発生した場合、Python は try に戻り、例外が処理された後、制御フローは try ステートメント全体を通過します (例外が発生した場合を除く)。例外の処理 新しい例外がスローされます)。 try の後のステートメントで例外が発生したが、一致する例外句がない場合、例外は上位の try またはプログラムの最上位レベルに送信されます (これによりプログラムが終了し、デフォルトのエラーが出力されます)メッセージ )。

try 句の実行時に例外が発生しない場合、Python は else ステートメントの後にステートメントを実行し (else がある場合)、制御フローは try ステートメント全体を通過します。

例外処理の例 1:

以下は簡単な例です。ファイルを開き、ファイルに内容を書き込みますが、例外は発生しません:

コードをコピーします コードは次のとおりです:#!/usr/bin/python
try: fh = open("testfile", "w")

fh.write("これは例外処理用のテスト ファイルです!!")
例外 IOError:
print "エラー: ファイルが見つからないか、データを読み取れません"
else:
print "ファイルにコンテンツが正常に書き込まれました"
fh.close()

上記のプログラムの出力結果:



コードをコピー コードは次のとおりです:ファイルに内容が正常に書き込まれました
例外処理例 2 :
次は簡単な例です。ファイルを開いてファイルにコンテンツを書き込みますが、ファイルには書き込み権限がないため、例外が発生します:

コードをコピー コードは次のとおりです: #!/usr/bin/python
try: fh = open("testfile", "w")

fh.write("これは例外処理用のテスト ファイルです!!")
例外 IOError:
print "エラー: ファイルが見つからないか、データを読み取れません"
else:
print "ファイルにコンテンツが正常に書き込まれました"

上記プログラムの出力結果:



コードをコピー コードは次のとおりです:エラー: ファイルが見つからないか、データを読み取れません
3. 例外タイプを使用せずに、Exception を使用します

次の例に示すように、例外タイプを指定せずに、Except を使用できます。


コードをコピー コードは次のとおりです。 試してみてください:
ここで操作を行います;
........................
例外:
例外がある場合は、このブロックを実行します。
........................
else:
例外がない場合

上記のメソッドの try-excel ステートメントは、発生したすべての例外をキャプチャします。しかし、これは良い方法ではなく、このプログラムを通じて特定の異常情報を特定することはできません。すべての例外をキャッチするためです。
4. 複数の例外タイプでの else の使用
以下に示すように、同じ else ステートメントを使用して複数の例外情報を処理することもできます。コードをコピーします
コードは次のとおりです:
try:
ここで操作を行います;
......................
excel(Exception1[, Exception2 [, ...ExceptionN]]):
指定された例外リストに例外がある場合は、
してこのブロックを実行します。
.. ....
else:
例外がない場合は、
5. try-finally ステートメント
の最後のステートメントを実行します。コードは例外が発生したかどうかに関係なく実行されます。
コードをコピー コードは次のとおりです:
try:

finally:
< ;Statement > #try を終了するときは、
raise
が常に実行されます。 注:Except ステートメントまたは Finally ステートメントを同時に使用することはできません。 else ステートメントは、finally ステートメントと一緒に使用することはできません

try-finally 使用例:

コードをコピー コードは次のとおりです:
#!/ usr/bin /python

try:
fh = open("testfile", "w")
fh.write("これは例外処理用のテスト ファイルです!!")
finally:
print "エラー: ファイルが見つからないか、データを読み取れません。


開いたファイルに書き込み権限がない場合、出力は次のようになります:
コードをコピー コードは次のとおりです:
エラー: ファイルが見つからないか、データを読み取れません
同じ例を次のように記述することもできます:
コードをコピー コードは次のとおりです:
#!/usr/bin/python

try:
fh = open("testfile", "w")
try:
fh.write("これは例外処理用のテスト ファイルです!!")
最後に:
print "ファイルを閉じます"
fh.close()
例外 IOError:
print "エラー: ファイルが見つからないか、データを読み取れません"


試行時ブロック内で例外がスローされ、finally ブロックのコードが直ちに実行されます。
finally ブロック内のすべてのステートメントが実行された後、例外が再度発生し、excel ブロッ​​ク コードが実行されます。
パラメータの内容が例外と異なります。

6. 例外パラメータ
例外には、出力例外情報パラメータとして使用できるパラメータを含めることができます。
次に示すように、Except ステートメントを通じて例外パラメータをキャプチャできます。

コードをコピー コードは次のとおりです。
try :
ここで操作を行います;
......................
ExceptionType、引数を除く:
ここで引数の値を出力します...
変数で受け取った例外値は、通常、例外のステートメントに含まれます。タプル形式の変数は 1 つ以上の値を受け取ることができます。
タプルには通常、エラー文字列、エラー番号、エラー位置が含まれます。
以下は単一例外の例です:
コードをコピーします コードは次のとおりです:
#!/usr /bin/python

# ここに関数を定義します。
def temp_convert(var):
try:
return int(var)
ValueError を除く、Argument:
print "引数に数値が含まれていませんn "、引数

# ここで上記の関数を呼び出します。
temp_convert("xyz");


上記プログラムの実行結果は次のとおりです:
コードをコピー コードは次のとおりです:
引数に数値が含まれていません
基数 10 の int() の無効なリテラル: 'xyz'
使用raise で例外をトリガーします:
raise ステートメントを使用して、独自に例外をトリガーできます

raise の構文形式は次のとおりです:

コードをコピーします コードは次のとおりです:
raise [ Exception [, args [ ,traceback]]]
このステートメントでは、Exception は例外の種類 (NameError など)、パラメーターは例外パラメーター値です。このパラメータはオプションです。指定しない場合、例外パラメータは「なし」になります。
最後のパラメータはオプションであり (実際にはほとんど使用されません)、存在する場合はトレース例外オブジェクトです。
raise の使用例:
例外は文字列、クラス、またはオブジェクトです。 Python カーネルによって提供される例外のほとんどは、クラスのインスタンスのパラメーターであるインスタンス化されたクラスです。
例外の定義は次のように非常に簡単です:
コードをコピーします コードは次のとおりです:
def functionName( level ):
if level raise "Invalid level!", level
# これに続くコードは実行されません
# 例外が発生した場合
注: 例外をキャッチするには、「excel」ステートメントで同じ例外を持つクラス オブジェクトまたは文字列をスローする必要があります。
たとえば、上記の例外をキャッチした場合、「例外」ステートメントは次のようになります:
コードをコピー コードは次のようになります:
try:
ここにビジネス ロジック...
"Invalid level!" を除く:
ここに例外処理...
else:
ここにコードの残りの部分...

7. ユーザー定義の例外インスタンス
新しい例外クラスを作成することで、プログラムは独自の例外に名前を付けることができます。例外は通常、直接的または間接的に Exception クラスから継承する必要があります。
次に、RuntimeError に関連する例を示します。この例では、基本クラスは RuntimeError であり、例外がトリガーされたときに詳細情報を出力するために使用されます。
try ステートメント ブロックでは、ユーザー定義の例外の後に、変数 e を使用して Networkerror クラスのインスタンスが作成されます。

コードをコピーします コードは次のとおりです:
class Networkerror(RuntimeError):
def __init__(self, arg):
self .args = arg
上記のクラスを定義した後、次のように例外をトリガーできます:
コードをコピー コードは次のとおりです:
try:
raise Networkerror("Bad hostname")
除外 Networkerror,e:
print e.args


Attachment: Python 標準例外
BaseExceptiona: すべての例外の基本クラス
SystemExitb python: インタープリターが終了を要求します
KeyboardInterruptc: ユーザーが実行を中断します (通常は入力) ^ C)
Exceptiond: 一般エラーの基本クラス
StopIteratione: イテレーターにはこれ以上値がありません
GeneratorExita: ジェネレーターで例外が発生し、終了に通知します
SystemExith: Python インタープリターが終了を要求します
StandardErrorg: すべての組み込み標準例外の基本クラス
ArithmeticErrord: すべての数値計算エラーの基本クラス
FloatingPointErrord: 浮動小数点計算エラー
OverflowError: 数値演算が最大制限を超えています
ZeroDivisionError: 除算 (またはモジュロ) ゼロ (すべてのデータ型)
AssertionErrord: アサーション ステートメントが失敗しました
AttributeError: オブジェクトにこの属性がありません
EOFError: 組み込み入力がありません、EOF フラグに達しました
EnvironmentErrord: オペレーティング システム エラー 基本クラス
IOError: 入出力操作が失敗しました
OSErrord: オペレーティング システム エラー
WindowsErrorh Windows: システム コールが失敗しました
ImportError: モジュール/オブジェクトのインポートに失敗しました
KeyboardInterruptf: ユーザー実行を中断します (通常は ^C を入力します)
LookupErrord: 無効なデータ クエリ 基本クラスです
IndexError: シーケンス内にそのようなインデックスはありません
KeyError: マップ内にそのようなキーはありません
MemoryError : メモリ不足エラー (Python インタプリタの場合は致命的ではありません)
NameError: 未宣言/初期化されたオブジェクト (プロパティがありません)
UnboundLocalErrorh: 未初期化のローカル変数へのアクセス
ReferenceErrore: 弱い参照が、次のようなオブジェクトにアクセスしようとしましたガベージ コレクションされました
RuntimeError: 一般的なランタイム エラー
NotImplementedErrord: メソッドがまだ実装されていません
SyntaxError: Python 構文エラー
IndentationErrorg: インデント エラー
TabErrorg: タブとスペースが混在しています
SystemError 一般インタープリタシステム エラー
TypeError: 型に対する無効な操作
ValueError: 渡されたパラメータが無効です
UnicodeErrorh: Unicode 関連のエラー
UnicodeDecodeErrori: Unicode デコード エラー
UnicodeEncodeErrori: Unicode エンコード エラー
UnicodeTranslateErrorf: Unicode変換エラー
Warningj: 警告の基本クラス
DeprecationWarningj: 非推奨の機能に関する警告
FutureWarningi: 構成要素に対する将来のセマンティック変更に関する警告
OverflowWarningk: Long への自動昇格に関する古い警告
PendingDeprecationWarningi:非推奨となる機能に関する警告
RuntimeWarningj: 不審なランタイム動作に関する警告
SyntaxWarningj: 不審な構文警告
UserWarningj: ユーザー コードによって生成された警告

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。