[解決済み] 警告のトレースバックを取得する
質問
numpyでは、次のようなことができます。
np.seterr(invalid='raise')
を使用すると、警告がエラーを発生させた場合のトレースバックを取得することができます (
この記事
).
- 警告をトレースするための一般的な方法はありますか?
- 警告が発生したときに、python がトレースバックを与えるようにできますか?
どのように解決するのですか?
に代入することで、望みのものを得ることができます。
warnings.showwarning
. は
警告モジュールドキュメント
自体がそうすることを推奨しているのですから、別に
ソースのダークサイド
. :)
この関数を別の実装に置き換えるには、この関数に代入して
warnings.showwarning
.
を行う新しい関数を定義することができます。
warning.showwarning
と同じことを行い、さらにスタックを表示する新しい関数を定義できます。そして、元の関数の代わりにそれを配置します。
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)
この方法では、エラーとして発生した各警告について完全なトレースバックを得ることができます(実行が停止するため、最初のものだけですが...)、一つずつ対処し、二度と聞きたくないものを無視するフィルタを作成できます...。
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] "お知らせ 未定義変数"、"Notice: Notice: 未定義のインデックス", "Notice:未定義のインデックス", "Notice."。PHPを使用した「未定義のオフセット
-
[解決済み] 他のPythonファイルをインポートするには?
-
[解決済み] チェックされていないキャストの警告に対処するにはどうすればよいですか?
-
[解決済み] Xcodeの警告。"出力ファイルに対する複数のビルドコマンド"
-
[解決済み】プログラムを停止/終了させることなく、完全な例外トレースバックをキャッチして表示する方法は?
-
[解決済み】カレントディレクトリの全サブディレクトリのリストを取得する
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?