Pythonの仕様:アサートを使います

アサートとは何ですか

  構文を主張します:

assert_stmt :: =   " 主張" [表現を" "表現を]

  例:

主張 1 == 2を、   主張は間違っている
トレースバック(最新の呼び出しの最後):
  ファイルassert.py 、4行目、、<モジュール>
     主張 1 == 2、   アサーションが間違っている
てAssertionError:アサーションがある間違っています

  に相当

もし __debug__ もし ない式1:上げてAssertionError(式2)を
  プログラムの中で役割を主張し、コードが内部のセルフチェックのいくつかをやっています。それはあなたがOKなら意味し、主張を使用します。この状態はどうなるのか発生しません。
  注:ときアサート括弧を使用することはできません
主張(1 == 2、' これは失敗しなければならない' #を输出 
<ipython-入力-8-2c057bd7fe24>:1:SyntaxWarning:アサーションがある常に真、おそらく括弧を削除しますか?
  主張(1 == 2、' これは失敗しなければなりません'

 使用を主張

  いくつかの一般的なシナリオの例。
  1.商品の割引。元の価格と割引を入力するよう求め、割引後の価格が出力されます   
デフapply_discount(価格、割引):
    updated_price =価格*(1 - 割引)
     アサート 0 <= updated_price <=価格は、価格が元の価格に0以上及び以下でなければならない
    戻り updated_price

  あなたが偽の条件を主張した場合、発生します

apply_discount(100、0.2  80.0 

apply_discount( 100、2 
てAssertionError:価格が大きくなければならないか、 0に等しい以下又は元の価格に等しいです

  背景には、各項目の平均販売価格を知りたい、アルゴリズムは、総売上高/売上高の数であります:

デフcalculate_average_price(TOTAL_SALES、num_sales):
     主張 num_sales> 0、' 販売数が0より大きくなければなりません' 
    リターン TOTAL_SALES / num_sales

  参加assert文、販売規定の数がゼロよりも大きくなければなりません。

  入力リストかどうか3.チェック

DEF FUNC(INPUT):
     アサートでisinstance(INPUT、リスト)、' INPUTは、リストの型でなければなりません' 
    以下の操作を前提に基づいています:入力が一覧表示しなければならないの
    IF LEN(INPUT)1 ==。 
        ... 
    elifの LEN( INPUT)== 2 
        ... 
    他に
        ...

エラーの例を主張

   主張のチェックは、このような失敗を主張できるようになるこのオプション-O追加し、Pythonプログラムを実行しているときのように、オフにすることができます。したがって、一度チェックがuser_is_admin()、オフされ、course_exist()これらの二つの関数が実行されないアサート。これは深刻な問題につながることができます:

デフdelete_course(ユーザー、Course_IDに):
     主張 user_is_admin(ユーザー)、' ユーザーが管理者でなければならない' 
    主張、course_exist(Course_IDにする)' コースIDが存在しなければならない' 
    削除(Course_IDに)

  ランタイムエラーのいくつかではプログラムの場合、または例外処理を開始します

DEF :(ユーザー、Course_IDに)をdelete_course
     場合 ではない(ユーザー)user_is_admin:
         引き上げる(例外を' ユーザーが管理者でなければならない' 場合 ではない(Course_IDに)をcourse_exist:
         引き上げる(例外' coursde IDが存在しなければなりません' 
    を削除(Course_IDにします)  

参照

   オタクタイム「Pythonのコア技術と実用的な」コラム

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

おすすめ

転載: www.cnblogs.com/xiaoguanqiu/p/11301253.html