私は、例外の名前と、渡された引数の名前を含む例外ハンドラに文字列を生成したいと思います... Tracebackで得られる最終出力は多くありません。例えばPythonで例外クラス名を取得していますか?
raise bar.FnordError("message")
が呼び出された場合、例外ハンドラでは、私は、文字列を生成します:"bar.FnordError: message"
私はそれが現在および他のモジュールで例外に建てられた、だけでなく、例外のために仕事をしたいです。これは私が思いついたものですが、それは非常に無色に見えません。
def this_is_lame(err):
if type(err).__module__ in ['__main__', 'builtins']:
return "{}: {}".format(type(err).__name__, err)
else:
return "{}.{}: {}".format(type(err).__module__, type(err).__name__, err)
PythonのBaseException CコードとTraceback標準ライブラリを掘り下げました。私は正しい「素敵な」アクセサを見逃しているようです。
BaseException.__format__
はどこに文書化されていますか?それのためにエスケープがありますか?
私は通訳で遊んだことがあります。
生成import sys
import traceback
import bar
try:
raise bar.FnordError("message")
except Exception as err:
print(type(err))
print(repr(err))
print(type(err).__module__)
print(type(err).__name__)
print(err)
print("this is what I want: '{}'".format(this_is_lame(err)))
print()
try:
raise ValueError("message")
except Exception as err:
print(type(err))
print(repr(err))
print(type(err).__module__)
print(type(err).__name__)
print("this is what I want: '{}'".format(this_is_lame(err)))
:
$ python foo.py
<class 'bar.FnordError'>
FnordError('message',)
bar
FnordError
message
this is what I want: 'bar.FnordError: message'
<class 'ValueError'>
ValueError('message',)
builtins
ValueError
this is what I want: 'ValueError: message'
あなたのthis_is_lame_too機能は、実際にはきれいだと思います。誰かのコードを理解するのに便利です。私には良いと思われる。 – kingledion