【问题标题】:How can I see the value of a variable that is inside a class during python interactive mode?如何在 python 交互模式下查看类内变量的值?
【发布时间】:2019-12-11 07:48:59
【问题描述】:

当我使用 python -i file.py 运行脚本并收到错误时,我想找出该变量的值。但是它在一个类中,而不是一个实例中。

class Foo:
    def func(self):
        action_dict = self.socket_resp() # a function that recieves some response from a socket. 
        print(action_dict['bar'])

python -i foo.py

KeyError 在 action_dict 中没有'bar'

action_dict

NameError: name 'action_dict' is not defined'

如何在交互模式下获取 action_dict 变量的值

【问题讨论】:

  • 它不在一个类中,而是在一个方法
  • 不,你不能那样做。以交互方式运行 python 程序与使用 interactive source code debugger 运行它是不同的

标签: python shell debugging interactive


【解决方案1】:

是的,你可以得到它。 -i 的例外情况将在 sys.last_value 中提供。 首先 import sys 并将sys.last_value 保存到变量中!如果输入错误,异常将永远丢失!

然后您可以导入traceback 模块并检查激活记录,其中包括所有调用帧中的局部变量!

因此我们得到:

% python3 -i file.py
Traceback (most recent call last):
  File "file.py", line 6, in <module>
    Foo().func()
  File "file.py", line 4, in func
    print(action_dict['bar'])
KeyError: 'bar'
>>> import sys
>>> exc = sys.last_value
>>> import traceback
>>> [*traceback.walk_tb(exc.__traceback__)][-1][0].f_locals
{'action_dict': {'foo': 'spam'}, 'self': <__main__.Foo object at 0x7f6aa2e6b978>}

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多