アサートとは何ですか
構文を主張します:
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のコア技術と実用的な」コラム