Pythonの例外処理

高洛峰
高洛峰オリジナル
2016-11-23 09:15:061128ブラウズ

Python は、Python プログラムの実行中に発生する例外とエラーを処理するための 2 つの非常に重要な関数を提供します。この機能を使用して、Python プログラムをデバッグできます。

例外処理: このサイトの Python チュートリアルで詳しく紹介されています。

アサーション: このサイトの Python チュートリアルで詳しく紹介します。

Python 標準例外

例外名

説明

BaseException すべての例外の基本クラス

SystemExit 終了するためのインタープリター要求

KeyboardInterrupt ユーザーが実行を中断する (通常は ^C を入力)

例外通常のエラー基本クラス

StopIteration イテレーターにはそれ以上の値がありません

GeneratorExit ジェネレーターで例外が発生し、終了を通知します

SystemExit Python インタープリターは終了を要求します

StandardError すべての組み込み標準例外の基本クラス

ArithmeticError すべての数値計算エラーの基本クラス

FloatingPointError 浮動小数点計算エラー

OverflowError 数値演算が上限を超えています

ZeroDivisionError 除算 (またはモジュロ) ゼロ (すべてのデータ型)

AssertionError アサーション ステートメントが失敗しました

AttributeError オブジェクトこの属性はありません

EOFError 組み込み入力がありません、EOF フラグに達しました

EnvironmentError オペレーティング システム エラーの基本クラス

IOError 入出力操作が失敗しました

OSError オペレーティング システム エラー

WindowsError システム コールが失敗しました

ImportError Failedモジュール/オブジェクトをインポートします

KeyboardInterrupt ユーザーが実行を中断します (通常は ^C を入力します)

LookupError 無効なデータクエリの基本クラス

IndexError シーケンス内にそのようなインデックスはありません

KeyError マップ内にそのようなキーはありません

MemoryError メモリ オーバーフロー エラー (Python の説明用) デバイスは致命的ではありません)

NameError 未宣言/初期化されたオブジェクト (プロパティがありません)

UnboundLocalError 初期化されていないローカル変数にアクセスしています

ReferenceError ガベージ コレクションされたオブジェクトにアクセスしようとしている弱い参照

RuntimeError 一般的なランタイム エラー

NotImplementedError メソッドはまだ実装されていません

SyntaxError Python 構文エラー

IndentationError インデント エラー

TabError タブとスペースの混在

SystemError 一般的なインタープリタ システム エラー

TypeError 型に対する無効な操作

ValueError 無効な入力パラメータ

UnicodeError Unicode 関連のエラー

UnicodeDecodeError Unicode デコード エラー

UnicodeEncodeError Unicode エンコード エラー

UnicodeTranslateError Unicode 変換エラー

Warning 警告基本クラス

DeprecationWarning 非推奨の機能に関する警告

FutureWarning War構成要素のセマンティクスが変更される可能性があるということfuture

OverflowWarning Long (long) への自動昇格に関する古い警告

PendingDeprecationWarning 機能が非推奨になるという警告

RuntimeWarning 不審なランタイム動作 ) 警告

SyntaxWarning Su危険な構文警告

UserWarning ユーザーコードによって生成される警告

とは例外?

例外とは、プログラムの実行中に発生し、プログラムの通常の実行に影響を与えるイベントです。

一般に、Python がプログラムを正常に処理できない場合に例外が発生します。

Exceptions は、エラーを表す Python オブジェクトです。

Python スクリプトで例外が発生した場合、それをキャッチして処理する必要があります。そうしないと、プログラムの実行が終了します。

例外処理

例外をキャッチするには、try/Except ステートメントを使用できます。

try/exc ステートメントは、try ステートメント ブロック内のエラーを検出するために使用されます。これにより、Except ステートメントは例外情報を取得して処理できるようになります。

例外が発生したときにプログラムを終了したくない場合は、try でキャッチしてください。

文法:

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

try:

追加データ

else:

#例外が発生しない場合

try の動作原理は、try ステートメントが開始されると、Python がそれをマークします。現在のプログラム。例外が発生したときにここに戻ることができます。try 句が最初に実行され、次に何が起こるかは実行中に例外が発生したかどうかによって決まります。

try の後のステートメントの実行時に例外が発生した場合、Python は try に戻り、例外に一致する最初の else 句を実行します。例外が処理された後、制御フローは try ステートメント全体を通過します(そうでない場合を除きます)。例外を処理するときに再度処理されます)、新しい例外がスローされます)。

try の後のステートメントで例外が発生したが、一致する例外句がない場合、例外は上位の try またはプログラムの最上位レベルに送信されます (これにより、プログラムが終了し、デフォルトのエラー メッセージが出力されます) )。

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

以下は簡単な例です。ファイルを開いてファイルにコンテンツを書き込みますが、例外は発生しません:

#!/usr/bin/python

try:

fh = open("testfile", "w")

fh.write("これは例外処理用のテスト ファイルです!!")

以外 IOError:

print "エラー: ファイルが見つからないか、読み取れませんdata"

else:

print "ファイルにコンテンツが正常に書き込まれました"

fh.close()

上記プログラムの出力:

ファイルに書き込まれたコンテンツ成功しました

インスタンス

以下は簡単な例です。ファイルを開いてファイルの内容を書き込みますが、ファイルに書き込み権限がないため、例外が発生しました:

#!/usr/bin/python

try:

fh = open("testfile", "w")

fh.write("これは例外処理用のテスト ファイルです!!")

を除くIOError:

print "エラー: ファイルが見つからないか、データを読み取れません"

else:

print "ファイルにコンテンツが正常に書き込まれました"

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

エラー: canファイルが見つからないか、データを読み取れません

例外タイプなしで、Except を使用します

以下に示すように、例外タイプなしで、Except を使用できます。ここでの操作;

...................

例外:

例外がある場合は、このブロックを実行します。

。 ................................

else:

例外がない場合は、このブロックを実行します。

上記のメソッド Try -Except ステートメントは、発生するすべての例外をキャッチします。しかし、これは良い方法ではなく、このプログラムを通じて特定の異常情報を特定することはできません。すべての例外をキャッチするためです。

複数の例外タイプを呼び出すには、Except を使用します

以下に示すように、同じExceptステートメントを使用して複数の例外メッセージを処理することもできます:

try:

ここで操作を行います;

.. ......

excel(Exception1[, Exception2[,...ExceptionN]]]):

指定された例外リストに例外がある場合、

次に、このブロックを実行します。

...................

else:

例外がない場合は、このブロックを実行します

try-finally ステートメント

try-finally ステートメントは、例外が発生したかどうかに関係なく、最後のコードを実行します。

try:

finally:

#try

raise

を終了するときに常に実行されます。

注:Except ステートメントまたは Finally ステートメントを使用できますが、両方を同時に使用することはできません。 else ステートメントは、finally ステートメントと同時に使用することはできません。 write("これは例外処理のテスト ファイルです!!")

finally:

print "エラー: ファイルが見つからないか、データを読み取ることができません"

開いているファイルに書き込み権限がない場合、出力は次のようになります:

エラー: ファイルが見つからないか、データを読み取れません

同じ例次のように書くこともできます:

#!/usr/ bin/python

try:

fh = open("testfile", "w")

try:

fh.write (「これは例外処理のテスト ファイルです!!」)

最後に:

print 「ファイルを閉じます」

fh.close()

以外 IOError:

print 「エラー: 見つかりません」ファイルまたは読み取りデータ」

try ブロックの場合、例外をスローし、finally ブロックのコードをすぐに実行します。

finally ブロック内のすべてのステートメントが実行された後、再び例外が発生し、excel ブロッ​​クのコードが実行されます。

パラメータの内容は例外とは異なります。

例外パラメータ

例外にはパラメータを含めることができ、出力例外情報パラメータとして使用できます。

以下に示すように、Except ステートメントを使用して例外パラメータをキャプチャできます:

try:

ここで操作を行います;

..... ....

ExceptionType を除く、Argument:

ここで Argument の値を出力できます...

変数によって受け取られた例外値は、通常、例外ステートメントに含まれます。タプル形式の変数は 1 つ以上の値を受け取ることができます。

タプルには通常、エラー文字列、エラー番号、エラー位置が含まれます。

インスタンス

以下は 1 つの例外の例です:

#!/usr/bin/python

# ここで関数を定義します。

def temp_convert(var):

try :

return int(var)

but ValueError, Argument:

print "引数に数値が含まれていませんn", Argument

# ここで上記の関数を呼び出します。

temp_convert("xyz");

上記のプログラムの実行結果は次のとおりです。

例外をトリガーするには

使用できます。 raise ステートメントはそれ自体で例外をトリガーします

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

raise [Exception [, args [, trackback]]]

ステートメント内の

Exception は例外のタイプ (例: NameError) パラメーターは例外パラメーター値です。このパラメータはオプションです。指定しない場合、例外パラメータは「なし」になります。

最後のパラメータはオプションであり (実際にはほとんど使用されません)、存在する場合はトレース例外オブジェクトです。

インスタンス

例外は文字列、クラス、またはオブジェクトです。 Python カーネルによって提供される例外のほとんどは、クラスのインスタンスのパラメーターであるインスタンス化されたクラスです。

例外の定義は次のように非常に簡単です:

def functionName(level):

if level

raise "Invalid level!", level

# これに対する以下のコード実行されません

# 例外を発生させた場合

注: 例外をキャッチできるようにするには、「excel」ステートメントで同じ例外を使用してクラス オブジェクトまたは文字列をスローする必要があります。

たとえば、上記の例外をキャッチした場合、「excel」ステートメントは次のようになります:

try:

Business Logic here...

excect "Invalid level!":

例外処理はここで...

else:

コードの残りの部分はここで...

ユーザー定義の例外

新しい例外クラスを作成することにより、プログラムは独自の例外に名前を付けることができます。例外は通常、直接または間接的に 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


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