[解決済み] Pythonで例外メッセージを正しく取得する方法
質問
Pythonの標準ライブラリのコンポーネントから例外のメッセージを取得する最も良い方法は何でしょうか?
私は、いくつかのケースでは、あなたがそれを得ることができることに気づいた
message
のフィールドにこのように記述します。
try:
pass
except Exception as ex:
print(ex.message)
のように記述しますが、場合によっては(例えば、ソケットエラーの場合)このように記述する必要があります。
try:
pass
except socket.error as ex:
print(ex)
これらの状況のほとんどをカバーする標準的な方法はないのでしょうか?
どのように解決するのですか?
もし、あなたが
のドキュメントを見ると、組み込みエラーの
のドキュメントを見ると、ほとんどの
Exception
クラスはその最初の引数を
message
属性として割り当てます。しかし、それらすべてがそうするわけではありません。
注目すべきは
EnvironmentError
(サブクラス
IOError
と
OSError
) は、第一引数が
errno
であり、第二引数は
strerror
. はありません。
message
...
strerror
は、通常であればおおよそ
message
.
より一般的には
Exception
のサブクラスは好きなようにできます。それらは
message
属性があってもなくてもかまいません。将来の組み込み
Exception
には
message
属性を持つことはできません。どんな
Exception
サブクラスは、サードパーティライブラリやユーザコードからインポートされたものには
message
属性がない場合があります。
私は、この処理の適切な方法は、特定の
Exception
サブクラスを特定し、そのサブクラスだけを捕捉することです。
except Exception
を持つすべてのサブクラスをキャッチするのではなく、それらのサブクラスのみをキャッチし、その特定のサブクラスが定義する任意の属性を好きなように利用します。
もし、どうしても
print
を表示させることは、非常に効果的だと思います。
Exception
があるかどうかに関わらず、それ自体を表示することが最も可能性が高いと思います。
message
属性があろうとなかろうと。
必要であれば、このようにmessage属性をチェックすることもできますが、ただ面倒に思えるので、あまりお勧めしません。
try:
pass
except Exception as e:
# Just print(e) is cleaner and more likely what you want,
# but if you insist on printing message specifically whenever possible...
if hasattr(e, 'message'):
print(e.message)
else:
print(e)
関連
-
PicgoのイメージベッドツールをPythonで実装する
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を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 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] Python 2.6で非推奨となったBaseException.message