ホームページ >バックエンド開発 >Python チュートリアル >Pythonの例外処理メソッドを図で詳しく解説
Python は、Python プログラムの実行中に発生する例外とエラーを処理するための 2 つの非常に重要な関数を提供します。この機能を使用して、Python プログラムをデバッグできます。
アイドル --> F1 キーを開くと、図に示すように、多くの例外タイプが含まれています。
例外とは、プログラムの実行中に発生し、プログラムの通常の実行に影響を与えるイベントです。
一般に、Python がプログラムを正常に処理できない場合に例外が発生します。
Exceptions は、エラーを表す Python オブジェクトです。
Python スクリプトで例外が発生した場合、それをキャッチして処理する必要があります。そうしないと、プログラムの実行が終了します。
例外をキャッチするには、try/Except ステートメントを使用できます。
try/exc ステートメントは、try ステートメント ブロック内のエラーを検出するために使用されます。これにより、Except ステートメントは例外情報を取得して処理できるようになります。
例外が発生したときにプログラムを終了したくない場合は、try でキャッチしてください。
構文:
以下は、単純な try....excel...else の構文です:
try
:
try
:
#运行别的代码
except
:
#如果在try部份引发了'name'异常
except
,:
#如果引发了'name'异常,获得附加的数据
else
:
#如果没有异常发生
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
#如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
#如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常:
#!/usr/bin/python
try
:
fh
=
open
(
"testfile"
,
"w"
)
fh.write(
"This is my test file for exception handling!!"
)
except
IOError:
#他のコードを実行
🎜🎜🎜🎜以外
<name>:</name>
🎜🎜🎜 🎜#try 部分で 'name' 例外が発生した場合
🎜🎜🎜🎜例外
<name>else</name>
:
🎜🎜🎜<statement> </statement>
#例外が発生しない場合
🎜🎜🎜 try の動作原理は、try ステートメントが開始されると、Python が現在のプログラムのコンテキストでそのステートメントをマークするため、例外が発生したときにここに戻ることができ、try 句が最初に実行され、次に何が起こるかはステートメントに依存します。実行時間。例外が発生したかどうか。 🎜🎜try の後のステートメントの実行時に例外が発生した場合、Python は try に戻り、例外に一致する最初の else 句を実行します。例外が処理された後、制御フローは try ステートメント全体を通過します(そうでない場合を除きます)。例外を処理するときに再度処理されます)、新しい例外がスローされます)。 🎜🎜#try の後のステートメントで例外が発生したが、一致する例外句がない場合、例外は上位の try またはプログラムの最上位レベルに送信されます (これによりプログラムが終了し、デフォルトのエラーが出力されます)メッセージ )。 🎜🎜#try 句の実行時に例外が発生しない場合、Python は else ステートメントの後にステートメントを実行し (else がある場合)、制御フローは try ステートメント全体を通過します。 🎜 #!/usr/bin/python
🎜🎜🎜🎜try
:
🎜🎜🎜🎜
fh
=
open
(
"testfile"
,
" w"<code>)
🎜🎜🎜🎜
fh.write(
"これは例外処理のテスト ファイルです!! " code><code>)
🎜🎜🎜🎜以外
IOError:
🎜🎜
print
「エラー: ファイルが見つからないか、データを読み取れません」
print
"Error: can't find file or read data"
else
:
print
"Written content in the file successfully"
fh.close()
以上程序输出结果:
Written content
in
the
file
successfully
下面是简单的例子,它打开一个文件,在该文件中的内容写入内容,但文件没有写入权限,发生了异常:
#!/usr/bin/python
try
:
fh
=
open
(
"testfile"
,
"r"
)
fh.write(
"This is my test file for exception handling!!"
)
except
IOError:
print
"Error: can't find file or read data"
else
:
print
"Written content in the file successfully"
以上程序输出结果:
Error: can't find
file
or
read data
你可以不带任何异常类型使用except,如下实例:
try
:
You do your operations here;
......................
except
:
If there
is
any
exception, then execute this block.
......................
else
:
If there
is
no exception then execute this block.
你也可以使用相同的except语句来处理多个异常信息,如下所示:
try
:
You do your operations here;
......................
else
:
🎜🎜🎜🎜
print
「ファイルにコンテンツが正常に書き込まれました」
🎜🎜🎜🎜
fh.close()
🎜🎜🎜上記プログラムの出力結果: 🎜🎜🎜🎜
記述内容 <code>
ファイル
正常
🎜🎜#!/usr/ bin/ python
🎜🎜🎜🎜try
:
🎜🎜🎜🎜
fh
= code> <code>open
(
"testfile"
,
"r"
>)
🎜🎜🎜🎜
fh.write(
"これは例外処理のテスト ファイルです!!"
)
🎜🎜🎜🎜例外
IOError:
🎜🎜🎜🎜
print
"エラー: ファイルが見つからないか、データを読み取れません"
🎜🎜🎜🎜else
:
🎜🎜🎜🎜
print <code>"ファイルにコンテンツが正常に書き込まれました"
🎜🎜🎜上記プログラムの出力結果: 🎜🎜🎜🎜Error: can code><code>file
または
read data
が見つかりません🎜🎜try
:
🎜🎜🎜🎜
ここで操作を行います;
🎜🎜🎜🎜
.... .....
🎜🎜🎜🎜例外
:
🎜🎜🎜🎜
ある場合
が 任意 例外の場合、このブロックを実行します。
🎜🎜🎜🎜
.... ...... .......
🎜🎜🎜🎜else
:
🎜🎜🎜🎜
is
例外がない場合は、このブロックを実行します。
🎜🎜:
🎜🎜🎜🎜
操作はここで行います;
🎜🎜🎜🎜
................................コード>🎜🎜以外
(Exception1[, Exception2[,...ExceptionN]]]):
except
(Exception1[, Exception2[,...ExceptionN]]]):
If there
is
any
exception
from
the given exception
list
,
then execute this block.
......................
else
:
If there
is
no exception then execute this block.
try-finally 语句无论是否发生异常都将执行最后的代码。
try
:
finally
:
#退出try时总会执行
raise
注意:你可以使用except语句或者finally语句,但是两者不能同时使用。else语句也不能与finally语句同时使用
#!/usr/bin/python
try
:
fh
=
open
(
"testfile"
,
"w"
)
fh.write(
"This is my test file for exception handling!!"
)
finally
:
print
"Error: can't find file or read data"
如果打开的文件没有可写权限,输出如下所示:
Error: can't find
file
or
read data
同样的例子也可以写成如下方式:
#!/usr/bin/python
try
:
fh
=
open
(
"testfile"
,
"w"
)
try
:
fh.write(
"This is my test file for exception handling!!"
)
finally
:
print
"Going to close the file"
fh.close()
except
IOError:
If there <code> は
任意の
例外
指定された例外
list<code>、
🎜🎜🎜🎜
その後、このブロックを実行します。
🎜🎜🎜🎜
.. ......
🎜🎜🎜🎜else
:
🎜🎜🎜🎜
is
例外がない場合は、このブロックを実行します。
🎜🎜試して
:
🎜🎜🎜🎜<statement></statement>
🎜🎜🎜🎜最後に
:
🎜🎜🎜🎜<statement> </statement>
#try 終了時に常に実行されます
🎜🎜🎜🎜raise
🎜🎜🎜 注:Except ステートメントまたは Finally ステートメントを使用できますが、両方を同時に使用することはできません。 else ステートメントは、finally ステートメントと一緒に使用することはできません🎜🎜🎜#!/usr/bin/python
🎜🎜🎜🎜try
:
🎜 🎜🎜 🎜
fh
=
open
(
"testfile" code> ,
"w"
)
🎜🎜🎜🎜
fh.write(
「これは例外処理のテスト ファイルです!!」
)
🎜🎜🎜🎜やっと
:
🎜🎜🎜 🎜
print
「エラー: ファイルが見つからないか、データを読み取ることができません」
🎜🎜🎜 開かれたファイルに書き込み権限がない場合、出力🎜🎜🎜エラー:
file
または
read data
が見つかりません🎜🎜🎜同じ例は次のように書くこともできます: 🎜🎜🎜#!/usr/bin/python
🎜🎜🎜🎜try
:
🎜🎜 🎜🎜
fh
=
open
(
"testfile"
) >、
code>"w"
)
🎜🎜🎜🎜
try
:
🎜🎜🎜 🎜
fh.write(
"これは例外処理のテスト ファイルです!!"
)
🎜🎜🎜🎜
最後に
:
🎜🎜🎜🎜
print
「ファイルを閉じます」
🎜🎜🎜🎜
fh.close()
🎜🎜🎜🎜以外 <code>IOError:
🎜🎜
print
"Error: can't find file or read data"
print
"Error: can't find file or read data"
当在try块中抛出一个异常,立即执行finally块代码。
finally块中的所有语句执行后,异常被再次提出,并执行except块代码。
参数的内容不同于异常。
异常的参数
一个异常可以带上参数,可作为输出的异常信息参数。
你可以通过except语句来捕获异常的参数,如下所示:
try
:
You do your operations here;
......................
except
ExceptionType, Argument:
You can
print
value of Argument here...
变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。
元组通常包含错误字符串,错误数字,错误位置。
实例
以下为单个异常的实例:
#!/usr/bin/python
# Define a function here.
def
temp_convert(var):
try
:
return
int
(var)
except
ValueError, Argument:
print
"The argument does not contain numbersn"
, Argument
# Call above function here.
temp_convert(
"xyz"
);
以上程序执行结果如下:
The argument does
not
contain numbers
invalid literal
for
int
() with base
10
:
'xyz'
触发异常
我们可以使用raise语句自己触发异常
raise语法格式如下:
raise
[Exception [, args [, traceback]]]
语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
实例
一个异常可以是一个字符串,类或对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。
定义一个异常非常简单,如下所示:
def
functionName( level ):
if
level <code>1
:
try ブロックで例外がスローされると、すぐに最後にブロックコードを実行します。 🎜🎜finally ブロック内のすべてのステートメントが実行された後、再び例外が発生し、excel ブロックのコードが実行されます。 🎜🎜パラメータの内容は例外とは異なります。 🎜try
:
🎜🎜🎜🎜
Youここで操作を行ってください;
🎜🎜🎜🎜
....................
🎜🎜🎜🎜以外
ExceptionType、引数:
🎜🎜🎜🎜
print code > <code>ここでの引数の値...
🎜🎜🎜変数で受け取る例外値は、通常、例外文に含まれます。タプル形式の変数は 1 つ以上の値を受け取ることができます。 🎜🎜タプルには通常、エラー文字列、エラー番号、エラー位置が含まれます。 🎜#!/usr/bin/python
🎜🎜 🎜🎜# ここで関数を定義します。🎜🎜🎜🎜def
temp_convert(var):
🎜🎜🎜🎜
try
:
🎜🎜🎜🎜
return
int
(var) 🎜🎜🎜🎜<code>
以外
ValueError、引数:
🎜🎜🎜🎜
print code> "引数に数字が含まれていませんn"
, Argument
🎜🎜🎜🎜# ここで上記の関数を呼び出します。
🎜🎜🎜temp_convert (
code>"xyz"
);
🎜🎜上記プログラムの実行結果は以下の通りです:🎜🎜🎜引数は
ありません
数値が含まれていません
🎜🎜🎜🎜無効なリテラル
for
int
( ) ベース
10:
'xyz'
🎜🎜raise
[Exception [, args [,traceback] ]]
ステートメント内の例外が異常です type (NameError など) パラメーターは例外パラメーター値です。このパラメータはオプションです。指定しない場合、例外パラメータは「なし」になります。 🎜🎜最後のパラメータはオプションであり (実際にはほとんど使用されません)、存在する場合はトレース例外オブジェクトです。 🎜def
functionName(level):
🎜🎜🎜🎜
if
レベル <code>1
:
🎜🎜
raise
「無効なレベルです!」
、レベル
raise
"Invalid level!"
, level
# The code below to this would not be executed
# if we raise the exception
注意:为了能够捕获异常,"except"语句必须有用相同的异常来抛出类对象或者字符串。
例如我们捕获以上异常,"except"语句如下所示:
try
:
Business Logic here...
except
"Invalid level!"
:
Exception handling here...
else
:
Rest of the code here...
通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。
在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。
class
Networkerror(RuntimeError):
def
__init__(
self
, arg):
self
.args
=
arg
在你定义以上类后,你可以触发该异常,如下所示:
try
:
raise
Networkerror(
"Bad hostname"
)
except
Networkerror,e:
print
e.args
# 例外が発生した場合、以下のコードは実行されません🎜🎜🎜🎜
# 例外が発生した場合
🎜🎜🎜注: code>strong>例外をキャッチできるようにするには、「excel」ステートメントは同じ例外を持つクラス オブジェクトまたは文字列をスローする必要があります。 🎜🎜たとえば、上記の例外をキャッチした場合、「例外」ステートメントは次のようになります: 🎜🎜🎜try
:
🎜🎜🎜🎜
ここにビジネス ロジックがあります...
🎜🎜🎜🎜以外
"レベルが無効です!"
:
🎜🎜🎜🎜 code><code>ここで例外処理します...
🎜🎜🎜🎜else
:
🎜🎜🎜🎜
コードの残りの部分はここにあります...
🎜🎜class
Networkerror(RuntimeError):
🎜🎜🎜🎜
def
__init__(
) >self
, arg):
🎜🎜🎜🎜
self
.args
=
arg
🎜🎜🎜上記のクラスを定義した後、次のように例外をトリガーできます: 🎜🎜🎜try
:🎜🎜🎜🎜<code>
raise
Networkerror(
"Bad hostname"
)
🎜🎜 🎜🎜以外
Networkerror,e:
🎜🎜🎜🎜
print
e.args
コード>🎜🎜以上がPythonの例外処理メソッドを図で詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。