14

使用:

traceback.print_stack()

私は得ることができます:

  File "x.py", line 20, in <module>
    y(x)
  File "x.py", line 11, in y
    fun(x)
  File "x.py", line 8, in fun
    traceback.print_stack()

私はこのようなものを手に入れる方法があります:

  File "x.py", line 20, in <module>
    y(x) WHERE x == 1
  File "x.py", line 11, in y
    fun(x) WHERE x == 'str'
  File "x.py", line 8, in fun
    traceback.print_stack()

関数に渡された引数を確認したいだけです。

4

2 に答える 2

14

inspect.getargvalues()トレースバックに属するスタックフレームを使用してアクセスすることで、おそらく何かをリグアップできます。

 inspect.getargvalues(traceback.tb_frame)

希望どおりの出力を得るには、いくつかの作業を行う必要があります。上記の行は最も内側のフレーム専用であるため、スタックを上って、すべてのフレームに必要な情報にアクセスする必要があります。 inspect.getouterframes()重宝するかもしれません。

于 2011-05-19T16:30:52.310 に答える
9

これには、検査モジュールを使用できます。

>>> import inspect
... def fn(x):
...     try:
...         print(1/0)
...     except ZeroDivisionError as e:
...         frames = inspect.trace()
...         argvalues = inspect.getargvalues(frames[0][0])
...         print("Argvalues: ", inspect.formatargvalues(*argvalues))
>>> fn(12)
Argvalues:  (x=12)
于 2011-05-19T16:38:53.603 に答える