pythonにおける関数体内部の異常処理(二)

4768 ワード

前の文章を通じて、私たちはすでにどのように異常を捕獲するかを知っていて、および関数の中で異常の処理メカニズムの話は多くありません.それでは、関数が値を返すことができると思って、また異常を投げ出してどうしますか?これはraiseキーワードが必要ですコードを見てみましょう
def calculate(a):
    """
             
    :param a:     
    :return: float  
    """
    if str(a).replace(".","",1).isdigit() :
        return float(a)
    else:
        NumError = Exception("          ")
        raise NumError
try:
    price = input("       : ")
    price = calculate(price)
    weight = input("       : ")
    weight = calculate(weight)
except Exception as err:
    print("    ,   :{},     ".format(err))
else:
    result = price * weight
    print("     :{}".format(result))

このコードは関数の中でelseの中でreturnがないことを発見することができて、raiseだけが投げた異常は実はraiseが関数の中で特別な作用で、それはreturnに相当して、そしてreturnの値は異常で、あなたはこのように関数の体内でtryを使うことができて、exceptは異常を捉えて、手動で異常状態を正常な状態に調整して、その関数は正常に実行して、return値関数体の内部でraiseを使って異常を投げ出す必要があります.手動で正常状態を異常状態に調整するのです.その関数は正常に実行されず、直接エラーが報告され、return値は必要ありません.
これによりunittestテストフレームワークでは、結果を正常にしたい場合はtryのassert異常を正常に投げ出し、raiseで異常を投げ出すことができます.
def test_02(self):
	try:
	    self.assertEqual(1,2)
	except AssertionError as e:
	    raise e

pythonは私たちが関数体の内部で異常処理を行うことを奨励しています.異常を使ってエラーフロー処理を行うのがpythonicに合っているので、pythonプログラマーの自分のコードに対する理解度を体現しています.どこで異常処理を行うかは、自分のコードに対する自信度を表しています.だから、皆さんは自分のコードの中で異常処理を多く使用しましょう.