warnings
ライブラリを使用して、多くの(現時点では)役に立たない警告をスローするコードを使用しています。ドキュメントの読み取り(/スキャン)単一の関数の警告を無効にする方法を見つけました。しかし、私はコードの多くを変更したくありません。
たぶん次のような旗はありpython -no-warning foo.py
ますか?
あなたは何をお勧めします?
warnings
ライブラリを使用して、多くの(現時点では)役に立たない警告をスローするコードを使用しています。ドキュメントの読み取り(/スキャン)単一の関数の警告を無効にする方法を見つけました。しかし、私はコードの多くを変更したくありません。
たぶん次のような旗はありpython -no-warning foo.py
ますか?
あなたは何をお勧めします?
回答:
あなたは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
category
、引数を:warnings.filterwarnings("ignore", category=DeprecationWarning)
warnings.filterwarnings
関数には便利なパラメーターもありますmodule
。指定したモジュールからの警告を無視することができます。
環境変数を定義することもできます(2010の新機能-python 2.7)
export PYTHONWARNINGS="ignore"
このようなテスト:デフォルト
$ export PYTHONWARNINGS="default"
$ python
>>> import warnings
>>> warnings.warn('my warning')
__main__:1: UserWarning: my warning
>>>
警告を無視する
$ export PYTHONWARNINGS="ignore"
$ python
>>> import warnings
>>> warnings.warn('my warning')
>>>
ために 非推奨の警告は、how-to-ignore-deprecation-warnings-in-pythonをご覧ください。
ここにコピーしました...
のドキュメントから warnings
モジュールの:
#!/usr/bin/env python -W ignore::DeprecationWarning
Windowsを使用している場合:-W ignore::DeprecationWarning
引数としてPythonに渡します。にキャストすることで、問題を解決するのがより良いです intに。
(Python 3.2では、デフォルトで非推奨の警告が無視されることに注意してください。)
または:
import warnings
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=DeprecationWarning)
import md5, sha
yourcode()
これで、他DeprecationWarning
のすべてのを取得できますが、次の原因が原因ではありません。
import md5, sha
tox
に追加PYTHONWARNINGS=ignore
するとsetenv
、出力の汚れが少なくなります。
これは古い質問ですが、Pythonアプリケーションを作成している場合にすべての警告をオフにするためのPEP 565の新しいガイダンスがいくつかあります。
import sys
import warnings
if not sys.warnoptions:
warnings.simplefilter("ignore")
これが推奨される理由は、デフォルトですべての警告をオフにしますがpython -W
、コマンドラインまたはで警告をオンに戻すことができるためPYTHONWARNINGS
です。
複雑なものを使いたくない場合は、次のようにします。
import warnings
warnings.filterwarnings("ignore", category=FutureWarning)
warnings.filterwarnings("default", category=FutureWarning)
通常発生する役に立たない警告を知っている場合は、メッセージでそれらをフィルタリングできます。
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")
私はこれが状況のニッチにのみ適用可能であることを理解していますが、numpy
私が本当に使用したい状況ではnp.errstate
:
np.sqrt(-1)
__main__:1: RuntimeWarning: invalid value encountered in sqrt
nan
ただし、使用np.errstate
:
with np.errstate(invalid='ignore'):
np.sqrt(-1)
nan
最も良い点は、これを特定のコード行にのみ適用できることです。
警告はstderrを介して出力され、簡単な解決策はCLIに「2> / dev / null」を追加することです。これは、Python 2.6の依存関係(yumなど)で立ち往生していて、さまざまなモジュールがカバレッジで絶滅の危機に瀕しているcentos 6のユーザーなど、多くのユーザーにとって非常に理にかなっています。
これは、SNIなどを含む暗号化に特に当てはまります。次の場所にあるprocを使用して、HTTPS処理用に2.6を更新できます。 https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2のます。
警告はまだ残っていますが、必要なものはすべてバックポートされています。stderrのリダイレクトにより、stdoutのコンテンツ自体は変更されませんが、クリーンなターミナル/シェル出力が残ります。
FriendFXに応答します。文1は、普遍的な解決策で問題に直接対応します。2番目の文は、引用されたアンカーの「警告を無効にする」を考慮に入れています。これはpython 2.6固有であり、RHEL / centos 6ユーザーは2.6なしでは直接実行できないことを示しています。具体的な警告は引用されていませんが、2番目のパラグラフ(2)は2.6の質問に答えます。暗号化モジュールの短所と、PythonのHTTPS / TLSパフォーマンスを「近代化」(つまり、アップグレード、バックポート、修正)する方法について。3番目のパラグラフ(3)は、リダイレクトの使用とモジュール/依存関係のアップグレードの結果を説明するだけです。
FutureWarning: This search is broken in 1.3 and earlier, and will be fixed in a future version. If you rely on the current behaviour, change it to [this other thing]
。今は警告を無視して、無害な警告を回避するためだけに不必要に醜いコードを書くよりも、警告が静かに修正されるのを待ちます。