『Pythonコアプログラミング』第10章エラーと異常学習ノート

2050 ワード

10.1 Pythonでの異常
  • NameError:不明な変数
  • にアクセスしてみます.
  • Zer 0 DivisionError:除数ゼロ
  • SyntaxError:Pythonインタプリタ構文エラー
  • IndexError:要求インデックスがシーケンス範囲
  • を超えています.
  • KeyError:存在しない辞書キーワードを要求
  • IOError:入出力エラー
  • Attribute:場所にアクセスしようとするオブジェクト属性
  • Value Error:値エラー
  • TypeError:タイプエラー、通常は付与値の左右のタイプが異なることによるエラー
  • を指す.
    10.2異常の検出と処理
    10.2.1 try-except文
    try:
        try_suite    #       
    except Exception1[, reason1]:
        except_suite1    #      1
    except Exception2[, reason1]:
        except_suite1    #      2
    except Exception3[, reason1]:
        except_suite1    #      3
    ...
    

    複数の例外を1つのexpect文に配置することもできます.
    try:
        try_suite    #       
    except (Exception1, Exception2)[, reason1]:
        except_suite    #      
    

    異常はPython 2.5にあるため、新しいクラスに移行され、BaseException、KeyboardInterrupt、SystemExitとExceptionのレベルを持つ新しい「すべての異常の母」が有効になった.
    すべての例外をキャプチャする必要がある場合は、次のように書きます.
    try:
        try_suite    #       
    except BaseException, e:
        except_suite    #          
    

    10.2.2 try-finally文
    try-finallyとtry-excpetの違いは、異常をキャプチャするために使用されるのではなく、異常が発生するかどうかにかかわらず、一貫した動作を維持するために使用されることが多いことです.
    try:
       try_suite
    finally:
        finally_suite  #       
    

    例を挙げると、ファイルを読み込もうとしたときに例外が投げ出され、最終的にはファイルを閉じる必要があります.コードはこのように処理できます.
    try:
        try:
            ccfile = open('carddata.txt','r')
            txns = ccfile.readlines()
        except IOError:
            log.write('no txns this month
    ') finally: ccfile.close()

    10.2.3 try-except-else-finally文まとめ
    try:
        try_suite
    except Exception1:
        suite_for_Exception1
    except (Exception2, Exception3, Exception4):
        suite_for_Exception_2_3_and_4
    except Exception5, Argument5:
        suite_for_Exception5_plus_argument
    except (Except6, Except7), Argument76:
        suite_for_Exception6_and_7_plus_argument
    except:
       suite_for_all_other_exceptions
    else:
        no_exceptions_detected_suite
    finally:
        always_execute_suite