654

ライブラリを使用して(現時点では)役に立たない警告を大量にスローするコードを使用していwarningsます。ドキュメントを読んで(/スキャンして)、単一の機能の警告を無効にする方法しか見つかりませんでした。しかし、コードをあまり変更したくありません。

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

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

4

12 に答える 12

851

Python docsのTemporarily Suppressing Warningsセクションを見てください。

非推奨の関数など、警告が発生することがわかっているが警告を表示したくないコードを使用している場合は、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
<stdin>:3: UserWarning: you are warned!
after
>>> warnings.filterwarnings("ignore")
>>> f()
before
after
于 2013-01-22T16:31:00.393 に答える
549

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

python -W ignore foo.py
于 2013-01-22T16:28:31.550 に答える
145

環境変数を定義することもできます (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()

これで、他のすべてのDeprecationWarnings が取得されますが、次の原因によるものは取得されません。

import md5, sha
于 2013-07-15T12:59:26.220 に答える
3

WARNINGSを無視するより Pythonic な方法


warning.filterwarnings()」はすべての警告を抑制していないため、次の方法を使用することをお勧めします。

import logging
    
for name in logging.Logger.manager.loggerDict.keys():
    logging.getLogger(name).setLevel(logging.CRITICAL)

#rest of the code starts here...

また、

特定の警告セットのみを抑制したい場合は、次のようにフィルタリングできます。

import logging
    
for name in logging.Logger.manager.loggerDict.keys():
    if ('boto' in name) or ('urllib3' in name) or ('s3transfer' in name) or ('boto3' in name) or ('botocore' in name) or ('nose' in name):
            logging.getLogger(name).setLevel(logging.CRITICAL)

#rest of the code starts here...
于 2021-01-13T15:54:05.467 に答える