5

アプリケーションを Django 1.6 から 1.7 に更新しています。

次のようなメッセージが多数表示されます。RemovedInDjango18Warning

それらをフィルタリングする方法はありますか?それらはインポート中に放出されます。

試してみwarnings.filterwarnings('ignore', '...')ましたが、呼び出す前に警告が表示されますwarnings.filterwarnings()

インポート中に発生するこれらの警告をフィルタリングするにはどうすればよいですか?

4

1 に答える 1

5

クイックフィックス

を実行したときだけ消音するにはmanage.py、次の行を の後に追加しimport sysます。

# ...
import sys

if not sys.warnoptions:
    sys.warnoptions += [None]

# ...

WSGI サーバー (つまり Apache) からもサイレントにしたい場合は、更新your_project/wsgi.pyして の後に次の行を追加しますimport os

# ...
import os
import sys

if not sys.warnoptions:
    sys.warnoptions += [None]

# ...

説明

これが機能する理由は、django.utils.log.configure_logging()それを処理する方法によるものです。

def configure_logging(logging_config, logging_settings):
    if not sys.warnoptions:
        # Route warnings through python logging
        logging.captureWarnings(True)
        # RemovedInNextVersionWarning is a subclass of DeprecationWarning which
        # is hidden by default, hence we force the "default" behavior
        warnings.simplefilter("default", RemovedInNextVersionWarning)
    # ...

の一部として起動プロセスの早い段階で意図的に呼び出されdjango.setup()ます。これにより、スタックのさらに下にあるエラーを黙らせる前にエラーが発生した理由が説明されます。

新しい要素を追加して、ロジックをバイパスしてsys.warnoptions強制的に評価するようにします。これは、モジュールによってロードされたときに Python の起動中にのみ使用されるTrueため、無害です。warnings

RemovedInNextVersionWarningRemovedInDjango18WarningDjango 1.7の単なるエイリアスです。RemovedInDjango19Warningこれは1.8に設定されており、将来のバージョンでも同様です。このコードは、このタイプのDeprecationWarning.


コマンド ライン メソッド

通常、pythonを呼び出すときの引数sys.warnoptionsに基づいて、python の起動時に設定されることに注意してください。したがって、開発サーバーを使用するときに警告を黙らせる簡単な方法は. これにはファイルの変更は必要ありませんが、単なるプレースホルダーであり、有効な警告アクションではないため、起動時に無害な警告が 1 つ表示されます。-Wpython -W123 manage.py runserver123

別の方法は ですが、これは ではない関心のあるものを含め、すべてpython -Wi::DeprecationWarning manage.py runserverを無視します。 DeprecationWarningRemovedInDjango18Warning

于 2015-08-27T04:45:41.593 に答える