pzrqの投稿は使用するように言っています:
str(e)
これはまさに私が必要としたものでした。
(Unicode環境の場合、次のように表示されます:
unicode(e)
動作し、非Unicode環境で正常に動作するように見えます)
Pzrqは他にも多くの良いことを言っていましたが、すべての良いことのために私はほとんど答えを逃しました。私は50ポイントを持っていないので、機能する単純なソリューションに注意を向けさせるために彼らの答えにコメントすることはできません、そして15を持っていないので、その答えに投票することはできませんが、投稿できます(逆に感じますが、まあ)-それで私はここに投稿しています-おそらくそのためにポイントを失います...
私のポイントはpzrqの答えに注意を引くことですので、以下のすべてに気を取って見逃さないでください。この投稿の最初の数行が最も重要です。
私の物語:
私がここに来た問題は、あなたが制御できないクラスからの例外をキャッチしたい場合でした-それから何??? 考えられるすべての例外からメッセージを取得できるようにするために、コードが使用するすべての可能なクラスをサブクラス化するつもりはありません。
私は使っていました:
except Exception as e:
print '%s (%s)' % (e.message,type(e))
これは、私たちすべてが知っているように、OPが尋ねた警告(ここに私を連れてきた)を与えます。これは、pzrqがそれを行う方法として与えます。
except Exception as e:
print '%s (%s)' % (str(e),type(e))
しませんでした。
私はユニコード環境ではありませんが、jjcの答えは私に不思議に思ったので、私はそれを試さなければなりませんでした。このコンテキストでは、これは次のようになります。
except Exception as e:
print '%s (%s)' % (unicode(e),type(e))
驚いたことに、これはstr(e)とまったく同じように機能しました。つまり、今はそれを使用しています。
'str(e)/ unicode(e)'が '承認されたPythonの方法'であるかどうかはわかりません。3.0に到達したときに、なぜそれが良くないのかはおそらくわかりますが、死ぬことなく予期せぬ例外(*)が発生し、そこから情報を取得しても消えることはありません...
(*) うーん。「予期しない例外」-私は途方に暮れたばかりだと思います!