PyCharm 能否以正确的顺序显示变量的字段?

Posted

技术标签:

【中文标题】PyCharm 能否以正确的顺序显示变量的字段?【英文标题】:Can PyCharm display the fields of a variable in correct order? 【发布时间】:2021-08-03 19:41:07 【问题描述】:

我定义了一个包含几个字段的数据类。当我打印它时,它们以正确的顺序显示:

def test():
    @dataclass
    class Image:
        width: int
        height: int
        pixels: object

    image = Image(width=4, height=3, pixels=list(range(12)))
    print(image)
    pass

这段代码的输出不错:

test.<locals>.Image(width=4, height=3, pixels=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

但是,如果我检查 PyCharm 中的变量(通过在最后一行的断点处停止,即 pass),它会按字母顺序显示字段,这很令人困惑:

我可以解决这个问题吗?

我正在使用 PyCharm 2019.1.2。

【问题讨论】:

【参考方案1】:

我研究了在"Debug tool window" 的"Variables pane" 中调整对象显示方式的可能性。供我自己使用并尝试解决另一个问题Showing class attributes in the Pycharm debugger when subclassing str,我认为通过显示一个类在“变量窗格”中的显示完全不同,只是因为它继承自字符串。

我可以解决这个问题吗?

简单的答案是:(目前)无法完成。 PyCharm 调试器会自动决定如何在“变量窗格”中显示无法使用设置从 IDE 内部配置的对象。

这个问题的具体情况是按声明顺序而不是字母顺序显示属性。此问题类似于File&gt;Settings&gt;Build, Execution, Deployment&gt;DebuggerDebugger&gt;Data Views&gt;@987 中的选项Data Views&gt;@987 内的值顺序但在 6543 (例如,它按字母顺序对未排序的set 的元素进行排序以进行显示)- 不是范围内的属性顺序。

这可能是我发现的 PyCharm 调试器的唯一限制。有一些不错的选择,但没有“变量窗格”那样方便:

    使用"Watches pane" - 可以完全控制您看到的内容和顺序。它的缺点是必须设置手表。 使用Evaluate Expression 的缺点是必须被调用。 使用Console tab。

最后,“也许有可能” 自定义“变量窗格”的显示,但我认为这始终是一个 hack,而不是正常的用例。如果我们注意到调试器是如何被调用的,我们可以检查pydevd.py 是如何实现的以及它接受的命令行参数。也许有一个未记录的 CLI 参数来配置“变量窗格”显示。

但是,只要看一眼 pydevd.py 模块的复杂性就足以在需要时简单地使用“Watches 窗格”作为替代方案。

C:\path_to_interpreter\python.exe

"C:\Program Files\JetBrains\PyCharm 2019.3.2\plugins\python\helpers\pydev\pydevd.py"

--multiproc --qt-support=auto --client 127.0.0.1 --port 51753 --file 

C:/path_to_your_module.py

Connected to pydev debugger (build 211.7142.13)

【讨论】:

以上是关于PyCharm 能否以正确的顺序显示变量的字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何以正确的顺序显示来自 Access 的数据?

无法以正确的顺序显示上传到 firebase 商店的图片

为啥pycharm显示位置pycharm64

TableView,以正确的顺序显示来自核心数据 NSSet 的记录

UITableView 仅在第一次运行时以正确的顺序显示行

Oracle 之 表新增字段后修改字段顺序