Pythonの異常捕獲メカニズム
17647 ワード
前言:この間、他人にPythonの授業設定と完了を書くとき、業務ロジックの必要性、あるいは自分のコードロジックの不完全な行のため、テストを行うときにpython解釈器が様々な異常を投げ出すので、ここでpythonの異常捕獲メカニズムを整理し、自分に簡単なまとめをしました.
ターゲット異常の概念 捕獲異常 異常の伝達 異常 を投げ出す
1.異常の概念プログラムが実行されると、pyton解釈器がエラーに遭遇すると、プログラムの実行が終了し、エラー情報が表示されます.これが異常です. プログラムが実行を停止し、エラーメッセージを提示するこの動作を放出異常と呼ぶ.(初めてmermaidを使いますが、ご了承ください) 開発したプログラムは,業務に対して異なるコードを記述し,異常を受信して処理する.
Pythonは構文に合致するpythonコードを実行する
異常
製品が安定して丈夫である.
はっきり言って、異常を捕獲するのは製品の安定性と丈夫性のためです.
2.異常のキャプチャ
2.1異常を単純にキャプチャする構文プログラム開発において、あるコードの実行が正しいか否かが不確定である場合、tryを増やして異常 をキャプチャすることができる.異常をキャプチャする最も簡単な構文フォーマット: try:試行、下に試行するコードを書き、正常に実行できるかどうか分からないコード except:そうでなければ、試行に失敗したコードケース1: を書きます.
テストしてみましょう
文字を入力します.
明らかに、このメカニズムは強い.
2.2エラータイプ取得プログラムの実行時に、異なるタイプの異常に遭遇する可能性があり、異なるタイプの異常に対して異なる応答を行う必要があり、この場合、 のエラータイプをキャプチャする必要がある.構文は次のとおりです: Python解釈器が異常を投げ出したとき、最後の行のエラーメッセージの最初の単語は、エラータイプです!!!try-except文が適用されない場合:
次の文字を入力します.
この中のエラーメッセージの最初の単語はValueErrorで、これがエラータイプです.取得エラーのタイプ
不明なエラーのキャプチャ開発時に、発生する可能性のあるすべてのエラーを予断するか、それとも一定の難易度を持つ か.プログラムにエラーが発生しても、Python解釈器の放出異常によってプログラムが終了しないようにするには、次のexcept構文を追加します.
ここではこのExceptionクラスを簡単に見てみましょう.
BaseExceptionクラスから継承され、初期化時にメタグループとキーワードパラメータを入力し、静的メソッドに従ってクラス構造が明確になります.
2.3異常取得完全構文実際の開発では,複雑な異常を処理できるように,完全な異常構文は以下の通りである: else異常がない場合にのみ実行されるコード finally異常の有無にかかわらず実行されるコードケース1最適化
3.異常の伝達異常の伝達-関数/メソッドが異常を実行すると、関数/メソッドの呼び出し側 に異常が伝達される.メインプログラムに渡されても異常処理がない場合、プログラムは で終了する.
ヒント:開発では、主関数に異常キャプチャ を追加することができる.で呼び出された他の関数は、例外が発生すると、主関数の例外取得に渡されます.これにより、コードに大量の異常捕捉を加えることなく、コードのクリーン化を保証することができる .
ケース2
4.raise異常放出
4.1シーンの適用開発中、コード実行エラーPythonインタプリタが異常を放出する以外は .はまた、アプリケーション固有のビジネス要件に基づいて例外例を自発的に放出することもできる. ユーザーにパスワードの入力を要求し、長さが8未満の場合、異常注意を投げ出す. 現在の関数は、ユーザにパスワードの入力を促すだけであり、パスワードの長さが正しくない場合、 を追加処理するために他の関数が必要である.
したがって、は、異常を放出することができ、他の処理が必要な関数によって異常 をキャプチャする.
4.2放出異常 Pythonでは、Exception例外クラス が提供されています.開発時、特定のビジネスニーズを満たす場合、異常を投げ出したい場合は、次のことができます. Exceptionオブジェクトを作成する raiseキーワードを使用して例外オブジェクト を投げ出す
需要定義input_password関数、ユーザーにパスワード の入力を促すユーザが長さ<8を入力と、異常 が放出される.ユーザーが長さ>=8を入力と、入力されたパスワードコードは次のように返される: .
これで終わり、時間を記録しましょう.
ターゲット
1.異常の概念
Pythonは構文に合致するpythonコードを実行する
異常
製品が安定して丈夫である.
はっきり言って、異常を捕獲するのは製品の安定性と丈夫性のためです.
2.異常のキャプチャ
2.1異常を単純にキャプチャする構文
try:
pass #
except:
pass #
try:
#
num = int(input(' :'))
result = 10 / num
print(result)
except:
print(' ')
テストしてみましょう
:10
1.0
Process finished with exit code 0
文字を入力します.
:a
明らかに、このメカニズムは強い.
2.2エラータイプ取得
try:
#
pass
except 1:
# 1,
pass
except ( 2, 3):
# 2 3,
pass
except Exception as result:
print(" %s" % result)
num = int(input(' :'))
print(num)
次の文字を入力します.
:a
Traceback (most recent call last):
File " python ", line ( ), in <module>
num = int(input(' :'))
ValueError: invalid literal for int() with base 10: 'a'
この中のエラーメッセージの最初の単語はValueErrorで、これがエラータイプです.取得エラーのタイプ
try:
#
num = int(input(' :'))
result = 10 / num
print(result)
except ZeroDivisionError:
print(' 0 ')
except ValueError:
print(' ')
不明なエラーのキャプチャ
except Exception as e:
print(" %s" % e)
ここではこのExceptionクラスを簡単に見てみましょう.
class Exception(BaseException):
""" Common base class for all non-exit exceptions. """
def __init__(self, *args, **kwargs): # real signature unknown
pass
@staticmethod # known case of __new__
def __new__(*args, **kwargs): # real signature unknown
""" Create and return a new object. See help(type) for accurate signature. """
pass
BaseExceptionクラスから継承され、初期化時にメタグループとキーワードパラメータを入力し、静的メソッドに従ってクラス構造が明確になります.
2.3異常取得完全構文
try:
#
pass
except 1:
# 1,
pass
except 2:
# 2,
pass
except ( 3, 4):
# 3 4,
pass
except Exception as result:
#
print(result)
else:
#
pass
finally:
# ,
print(" , ")
try:
#
num = int(input(' :'))
result = 10 / num
print(result)
except ValueError:
print(' ')
except Exception as e:
print(' %s' % e)
else:
print(' ')
finally:
print(' ')
3.異常の伝達
ヒント:
ケース2
def fun1():
return int(input(' :'))
def fun2():
return fun1()
try:
print(fun2())
except Exception as e:
print(e)
finally:
print(' ')
4.raise異常放出
4.1シーンの適用
したがって、
4.2放出異常
需要
def input_password():
pwd = input(' :')
# < 8
if len(pwd) >= 8:
return pwd
print(' ')
#
# Exception __init__(self, self, *args, **kwargs) ?
ex = Exception(" , ")
raise ex
try:
print(input_password())
except Exception as e:
print(e)
これで終わり、時間を記録しましょう.
In [1]: from datetime import datetime
In [2]: print(datetime.now())
2020-02-15 14:07:56.561248
In [3]: