[解決済み] Pythonで "内部例外"(トレースバック付き)?
2022-04-24 16:18:59
質問
私のバックグラウンドはC#で、最近Pythonでプログラミングを始めたところです。例外がスローされたとき、私は通常、完全なスタックトレースを表示しながら、より多くの情報を追加する別の例外でそれをラップしたいと思います。C#では非常に簡単ですが、Pythonではどうすればいいのでしょうか?
例えば、C#では次のようなことをします。
try
{
ProcessFile(filePath);
}
catch (Exception ex)
{
throw new ApplicationException("Failed to process file " + filePath, ex);
}
Pythonでも似たようなことができる。
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file ' + filePath, e)
...しかし、これでは内部の例外のトレースバックが失われてしまいます!
編集してください。 例外メッセージとスタックトレースの両方を見て、両者を関連付けたいのですが。つまり、例外Xがここで発生し、次に例外Yがそこで発生したことを出力で見たいのです - C#の場合と同じです。これはPython 2.6で可能でしょうか?今のところ(Glenn Maynardの回答に基づいて)私ができる最善のことのように見えます。
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
これにはメッセージとトレースバックの両方が含まれますが、トレースバックのどこでどの例外が発生したかは表示されません。
解決方法は?
Python 2
単純に、raiseの第3引数にトレースバックを渡すだけです。
import sys
class MyException(Exception): pass
try:
raise TypeError("test")
except TypeError, e:
raise MyException(), None, sys.exc_info()[2]
ある例外をキャッチして、別の例外を再度発生させる場合は、必ずこの操作を行います。
関連
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonで例外を表示するには?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonのエラーをデバッグ情報とともにログに記録する方法は?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
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関数の高度な応用を解説
-
Python jiabaライブラリの使用方法について説明
-
Python入門 openを使ったファイルの読み書きの方法
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
Python LeNetネットワークの説明とpytorchでの実装
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。