[解決済み] Pythonでアサーションを無効にする
質問
Pythonでアサーションを無効にするにはどうすればよいですか?
つまり、アサーションが失敗したとき、私はそれが
AssertionError
を投げるのではなく、継続させるということです。
どうしたらいいんだろう?
どのように解決するのですか?
<ブロッククオートPythonでアサーションを無効にするには?
1つのプロセス、環境、または1行のコードに影響を与える複数のアプローチがあります。
それぞれを実演します。
全体の流れについて
を使用して
-O
フラグ (大文字の O) を使用すると、プロセス内のすべての assert ステートメントを無効にします。
例えば
$ python -Oc "assert False"
$ python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
disableというのは、それに続く式も実行しないという意味であることに注意してください。
$ python -Oc "assert 1/0"
$ python -c "assert 1/0"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
環境について
環境変数を使ってこのフラグを設定することもできます。
これは、その環境を使用または継承するすべてのプロセスに影響します。
例: Windows では、環境変数を設定してからクリアする。
C:\>python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
C:\>SET PYTHONOPTIMIZE=TRUE
C:\>python -c "assert False"
C:\>SET PYTHONOPTIMIZE=
C:\>python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
Unixでも同じ(setと アンセット を使う)
コード内の一点
あなたは質問を続けます。
アサーションが失敗した場合、AssertionErrorを投げず、そのまま続行させたい。
失敗したコードを実行させたい場合は、例えば制御フローがアサーションに到達しないようにするか、どちらかをキャッチすればよい。
if False:
assert False, "we know this fails, but we don't get here"
または、アサーションエラーをキャッチすることができます。
try:
assert False, "this code runs, fails, and the exception is caught"
except AssertionError as e:
print(repr(e))
というように印刷します。
AssertionError('this code runs, fails, and the exception is caught')
を処理したところから、続けて
AssertionError
.
参考文献
から
は
assert
ドキュメント
:
こんな感じのassert文。
assert expression #, optional_message
と同等です。
if __debug__: if not expression: raise AssertionError #(optional_message)
そして
組み込み変数
__debug__
はTrue
である。False
最適化が要求された場合(コマンドラインオプション-O
).
さらに
<ブロッククオート
へのアサインメント
__debug__
への代入は違法です。組み込み変数の値はインタプリタ起動時に決定されます。
使い方ドキュメントより。
基本的な最適化をオンにします。これにより、コンパイル済み(バイトコード)ファイルのファイル名拡張子が.pycから.pyoに変更されます。PYTHONOPTIMIZEも参照してください。
と
空でない文字列を指定した場合、その文字列は を指定するのと同じです。
-O
オプションを指定するのと同じです。整数を指定した場合,以下のようになる。 を指定するのと同じです。-O
を複数回指定するのと同じです。
関連
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] インデックスを指定してリストから要素を削除する方法
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エクスポートされた環境変数を削除する方法を教えてください。
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例