python - PyCharm 可以按正确的顺序显示变量的字段吗?
问题描述
我定义了一个有几个字段的数据类。当我打印它时,它们以正确的顺序显示:
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。
解决方案
我研究了调整对象在“调试工具窗口”的“变量窗格”中的显示方式的可能性。供我自己使用并尝试解决另一个问题Showing class attributes in the Pycharm debugger when subclassing str我认为通过显示一个类在“变量窗格”中的显示完全不同,只是因为它继承自字符串,从而完美地说明了这一点。
我可以修复这种行为吗?
简单的答案是:(目前)无法完成。PyCharm 调试器会自动决定如何在“变量窗格”中显示无法使用设置从 IDE 内部配置的对象。
这个问题的具体情况是按声明顺序而不是字母顺序显示属性。此问题类似于选项 atFile
>
Settings
>
Build, Execution, Deployment
>
Debugger
>
Data Views
>
Sort values alphabetically
但这是针对变量内部的值顺序(例如,它按set
字母顺序对未排序的元素进行排序以进行显示)-而不是范围内的属性顺序。
这可能是我发现的 PyCharm 调试器的唯一限制。有一些不错的选择,但没有“变量窗格”那样的便利:
- 使用“手表窗格” - 允许完全控制您看到的内容和顺序。它的缺点是必须设置手表。
- 使用Evaluate Expression具有必须调用的缺点。
- 使用控制台选项卡。
最后,“也许有可能”自定义“变量窗格”的显示,但我认为这始终是一个 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)
推荐阅读
- python - numpy.f2py.compile() 函数是否有更多可用文档?
- python - 元组内具有元组的整数之和
- javascript - 使用 FusionCharts 绘制实时数据
- java - 在java的构造函数中创建一个ArrayList
- android - AppCompatActivity onCreate 中的 java.util.ConcurrentModificationException
- jquery - 如何将敏感数据传递给 JQuery
- roblox - 如何从 Roblox Exploit Api Dll Inject 中删除控制台
- karate - 如何为字符串数组上的“任何数组项开头”做空手道匹配器?
- compiler-construction - LLVM 的 opt 不加载插件(.so),不输出任何错误
- matlab - 如何在 Matlab 的 EEGLAB 插件中安装 Butterworth 滤波器?