2017-03-21 13 views
0

例外メッセージで関数の引数のリテラル表現を取得したいと思います。 xは任意のオブジェクト型である可能性があるので、この型に対してstrとreprが定義されていない可能性があります。それを達成する方法はありますか?ありがとう。関数の引数のリテラル表現を取得するには?

def f(x, y) 
    raise Exception("<x> is not valid") 
+1

'' {!r}は無効です '。形式(x) '?彼らが(賢明な) '__repr__'を定義していないなら、あなたは本当に妥当なリテラルフォームを生成するのに十分な情報を持っていません。いくつかのオブジェクトでは、( '__init__ 'ですべての状態を渡すことができない場合など)全く可能ではないかもしれません。 – jonrsharpe

答えて

0

Johnrsharpeは、この賞賛の中で、シンプルな書式設定があなたのユースケースでうまくいくはずだと述べています。

たとえば、クラスと関数がある場合。

class Myobj: 
    pass 


def f(x, y): 
    raise Exception("{!r} is not valid".format(x)) 


f(Myobj, 1) 

あなたは、あなたが呼び出されているオブジェクトが言及されているdesciptionで見ることができる出力と素敵なトレースバック

Traceback (most recent call last): 
    File "42920465.py", line 9, in <module> 
    f(Myobj, 1) 
    File "42920465.py", line 6, in f 
    raise Exception("{!r} is not valid".format(x)) 
Exception: <class '__main__.Myobj'> is not valid 

を得ることができる必要があります。

関連する問題