web-dev-qa-db-ja.com

Pythonの警告を無効にする方法

私は warnings ライブラリを使って(現時点では私には)無用な警告を投げるコードを扱っています。ドキュメントを読む(/スキャンする)私が見つけたのは唯一の方法 単一の機能に対する警告を無効にする方法 。しかし、コードをそれほど変更したくはありません。

python -no-warning foo.pyのようなフラグはありますか?

あなたは何をお勧めします?

287
Framester

-Wオプション があります。

python -W ignore foo.py

278
Pavel Anossov

Pythonドキュメントの 警告を抑制します のセクションを見ましたか?

廃止予定の関数など、警告を発することがわかっているが警告を表示したくないとわかっているコードを使用している場合は、catch_warningsコンテキストマネージャを使用して警告を抑制することができます。

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()

私はそれを容認しません、しかし、あなたはただこれを使うことができます すべての警告を抑制します

import warnings
warnings.filterwarnings("ignore")

例:

>>> import warnings
>>> def f():
...  print('before')
...  warnings.warn('you are warned!')
...  print('after')
>>> f()
before
__main__:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
375
Mike

環境変数を定義することもできます(2010年の新機能 - すなわちpython 2.7)

export PYTHONWARNINGS="ignore"

このようにテストしてください: デフォルト

$ export PYTHONWARNINGS="default"
$ python
>>> import warnings
>>> warnings.warn('my warning')
__main__:1: UserWarning: my warning
>>>

無視する warnings

$ export PYTHONWARNINGS="ignore"
$ python
>>> import warnings
>>> warnings.warn('my warning')
>>> 
68
Holger Bille

これは古い質問ですが、 PEP 565 に新しいガイダンスがいくつかあります。Pythonアプリケーションを書いている場合はすべての警告をオフにすることをお勧めします。

import sys
import warnings

if not sys.warnoptions:
    warnings.simplefilter("ignore")

これが推奨される理由は、デフォルトですべての警告を無効にしますが、コマンドラインまたはPYTHONWARNINGSpython -Wを介して警告を有効に戻すことが決定的に許可されているためです。

50
Chris_Rands

複雑なことをしたくない場合は、

import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
15
Abhishek Jain

あなたがあなたが通常遭遇する無用な警告が何であるかを知っているならば、あなたはメッセージによってそれらをフィルターにかけることができます。

import warnings

#ignore by message
warnings.filterwarnings("ignore", message="divide by zero encountered in divide")

#part of the message is also okay
warnings.filterwarnings("ignore", message="divide by zero encountered") 
warnings.filterwarnings("ignore", message="invalid value encountered")
0
user3226167

警告はstderrを介して出力され、簡単な解決策はCLIに '2>/dev/null'を追加することです。これは、(yumのような)python 2.6の依存関係にとどまっているcentos 6のような多くのユーザーにとって多くの意味があり、様々なモジュールが彼らの報道で絶滅の危機に瀕しています。

これは、SNIなどを含む暗号方式に特に当てはまります。次の場所にあるprocを使用して、HTTPS処理のために2.6を更新することができます。 https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2

警告はまだありますが、必要なものはすべてバックポートされています。標準出力の内容自体は変更されませんが、stderrをリダイレクトすると端末/シェルの出力がクリーンになります。

friendFXに返信します。文1は普遍的な解決策で問題に直接対応しています。センテンス2(2)は引用されたアンカーの「警告を無効にする」を考慮に入れています。これはpython 2.6特有であり、RHEL/centos 6ユーザーは2.6なしで直接行うことはできないと述べています。特に警告はされていませんが、パラグラフ2は、私が最もよくある暗号化モジュールの欠点と、pythonのHTTPS/TLSパフォーマンスを「近代化」(すなわち、アップグレード、バックポート、修正)する方法です。 。第3項では、リダイレクトを使用してモジュール/依存関係をアップグレードした結果について説明しています。

0
jvp