【问题标题】:PyCharm debugger doesn't show objects' content: "Unable to get repr for <type 'list>"PyCharm 调试器不显示对象的内容:“无法获取 <type 'list> 的 repr”
【发布时间】:2018-01-02 17:13:38
【问题描述】:

使用 PyCharm 进行调试(发生在多个版本上)我无法正确查看某些列表和字典(其他显示正确)。 在视图窗口中,对象的名称与消息一起显示: {list} Unable to get repr for &lt;type 'list&gt; 要么 {dict} Unable to get repr for &lt;type 'dict'&gt;

更新: 在我的一次尝试中,我收到了来自调试器的以下消息(而不是列表变量之一的值):

无法显示子项:解析变量 Traceback 时出错(大多数 最近通话最后):文件“/Applications/PyCharm CE.app/Contents/helpers/pydev/_pydevd_bundle/pydevd_comm.py”,行 1004,在do_it中 _typeName, valDict = pydevd_vars.resolve_compound_variable(self.thread_id, self.frame_id, self.scope, self.attributes) TypeError: 'NoneType' 对象不是 可迭代

我会很感激任何关于什么可能导致这种行为的想法?

谢谢!

【问题讨论】:

  • 请添加一个最小的工作示例
  • 小样本或任何脚本都不会重现该问题。我试图了解可能导致此类错误的潜在原因。谢谢!

标签: macos pycharm pydev


【解决方案1】:

原来问题是由于使用了 rpyc.py:我正在调试的进程是通过 rpyc 调用的,当我调试它时,调用进程在 rpyc 连接上收到超时。 我认为这会导致通过 rpc 传递的变量失去完整性,因此调试器无法正确显示它们。

解决方案是将 rpyc.py 降级到版本 3.3.0(我在 3.4.2 上)。 我的同事 Nurit Izraelov 正确地建议 rpyc.py 版本可能是罪魁祸首。

谢谢大家!

【讨论】:

  • 您能否解释一下rpyc.py 的确切位置以及如何降级?我查看了我项目的解释器包(在设置窗口中),但找不到任何提及 rpyc
  • 嗨,rpyc 是一个库,所以在 Pycharm 中,您将转到 PyCharm 菜单 -> Preferences... 在对话框中,在左侧选择您的项目 -> 项目解释器。在右窗格的顶部,从下拉框中选择您的解释器,然后在左下角选择 + 号。在新打开的对话框中输入“rpyc”并在右下角选中“指定版本”并选择您想要的版本。单击安装版本按钮并确定。希望对您有所帮助。
  • 是的,我的意思是我确实查看了我的项目的解释器库,但我似乎没有安装任何 rpyc。看起来我面临一个不同的问题,除非你建议我应该安装 rpyc lib 来解决这个问题? (我似乎也没有任何名为 pydev 的东西,似乎由 Pycharm 在其他地方处理)。
  • 如果你没有安装 rpyc 并且想使用它,你可以按照我上面写的说明安装它。无论如何,我强烈建议反对以任何方式使用 rpc(rpyc 包装),在我看来,这是一种过时且有问题的技术。我更喜欢使用队列或 REST API 在进程之间进行通信。
【解决方案2】:

您的某些自定义类可能包含错误的__repr____str__,并且调试器无法打印它。

此时您可能可以使用 shell 来了解哪些元素实际上位于此类 dictlist 中(并查看哪个对象具有错误的 __repr____str__)。

【讨论】:

    【解决方案3】:

    它有时发生在我身上,导致这种行为的原因是某些 MyClass 在其 str 方法上触发了异常。

    在这种情况下,PyCharm 调试器只显示

    some_object = {MyClass} Unable to get repr for &lt;class 'my_app.models.MyClass'&gt;

    所以我确认来源的方法是在调试器的 Watches 部分观看 repr(some_object)。它给了我一个明确的错误信息:

    {TypeError}%d format: a number is required, not NoneType

    这帮助我追溯了起源。

    我很欣赏这不是一个通用的答案,而只是对 Fabio 的补充。

    【讨论】:

      【解决方案4】:

      扩大问题的范围而不是添加答案 - 所有其他建议都是我通常会做的事情。

      这可能是竞争条件吗?

      对我来说,这似乎很奇怪。在“变量”窗格中,我可以看到 theObjectrepr(theObject) 甚至 [theObject] 的正确表示,但如果我在代码中设置了一个变量,因此 a = theObjectb = [theObject] 然后我得到“无法获得代表 " 消息。

      在这种情况下,theObject 是使用 autowrap 包装的子类 D lang 结构的实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        • 2019-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多