Numpyでは np.seterr(invalid='raise')
を実行して、代わりにエラーを発生させる警告のトレースバックを取得できます( this post を参照)。
warnings.showwarning
に割り当てることで、必要なものを取得できます。 warnings module documentation 自体はあなたがそうすることを推奨しているので、ソースのダークサイド。 :)
warnings.showwarning
に割り当てることにより、この関数を別の実装に置き換えることができます。
warning.showwarning
normalyが行うことと、さらにスタックを出力することを行う新しい関数を定義できます。次に、元の代わりに配置します:
import traceback
import warnings
import sys
def warn_with_traceback(message, category, filename, lineno, file=None, line=None):
log = file if hasattr(file,'write') else sys.stderr
traceback.print_stack(file=log)
log.write(warnings.formatwarning(message, category, filename, lineno, line))
warnings.showwarning = warn_with_traceback
この後、すべての警告は、警告メッセージとともにスタックトレースを出力します。ただし、最初の警告ではないため警告が無視された場合は何も起こらないので、引き続き実行する必要があることに注意してください。
warnings.simplefilter("always")
numpy.seterr
がwarning
モジュールのフィルターを介して提供する同様のコントロールを取得できます。
必要なものがpythonであり、最初だけでなくトリガーされるたびにすべての警告を報告する場合は、次のようなものを含めることができます。
import warnings
warnings.simplefilter("always")
異なる文字列を引数として渡すことにより、他の動作を取得できます。同じ関数を使用して、警告を発生させたモジュール、警告が提供するメッセージ、警告クラス、警告を引き起こしているコード行などに応じて、警告の異なる動作を指定することもできます...
モジュールのドキュメント のリストを確認できます
例として、完全に無視する必要があるDeprecationWarnings
を除くすべての警告を設定して例外を発生させることができます。
import warnings
warnings.simplefilter("error")
warnings.simplefilter("ignore", DeprecationWarning)
この方法では、エラーとして発生した各警告の完全なトレースバックを取得します(実行は停止するため、最初の警告のみです...しかし、それらを1つずつ対処し、聞きたくないものを無視するフィルターを作成できます)再び...