You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python懒参数初始化执行顺序异常:类初始化时触发未预期运行的代码

异常成因

这个现象是PyCharm调试器的自动属性求值功能导致的,和代码逻辑本身无关:

  1. 你的基类TsDataSetBase中labels、data、tensors都是@property装饰的计算属性,只要被访问就会触发判断:当__labels和__data为空时自动调用get_as_tensor(),也就是你打印strange的方法。同时继承的Dataset类的__len__方法内部也调用了self.labels,同样会触发该逻辑。
  2. PyCharm调试模式下,变量面板会自动读取实例的所有属性、特殊方法返回值展示给开发者,会主动访问上述几个计算属性以及__len__方法,因此会多次触发get_as_tensor(),打印多遍strange。
  3. 断点无法生效的原因是PyCharm默认对调试器自身触发的代码求值操作,会跳过用户设置的普通断点,所以无法捕获到调用栈。

验证方法

你可以直接用非调试模式普通运行代码,实例化时只会输出so strange和end of init,不会出现多余的strange打印,即可确认是调试器导致的问题。

解决方案

  • 临时规避:进入PyCharm设置 File > Settings > Build, Execution, Deployment > Debugger > Data Views,取消勾选Enable auto-expressions in variables view和Show value tooltip,关闭调试器自动属性求值即可。
  • 代码层面优化:可以给懒加载逻辑加标记位,或者初始化时提前给属性赋值占位,避免调试时自动触发不必要的加载逻辑。

内容的提问来源于stack exchange,提问作者misha312

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:24:04