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

Python 3.11中dataclasses.asdict无法使用?问题排查求助

Python 3.11.1中dataclasses.asdict()抛出NameError: _is_dataclass_instance未定义的问题

问题重现

运行以下代码:

from dataclasses import asdict, dataclass

@dataclass
class DC:
    a: int
    b: int

c = DC(a=10, b=5)
dc = asdict(c)
print(dc)
  • 在Python 3.10中可正常运行,输出{'a': 10, 'b': 5}
  • 在Python 3.11.1中运行会抛出以下错误:
File "C:\Sources\IAA\python-utils\tests\test_dict.py", line 11, in <module>
    dc = asdict(c)
         ^^^^^^^^^
  File "C:\Python\311\Lib\dataclasses.py", line 1272, in asdict
    if not _is_dataclass_instance(obj):
           ^^^^^^^^^^^^^^^^^^^^^^
NameError: name '_is_dataclass_instance' is not defined. Did you mean: 
'config_is_dataclass_instance'?

问题原因

这是Python 3.11.1的已知bug:在dataclasses.py的asdict()函数中,代码引用了内部函数_is_dataclass_instance,但该函数在3.11.1版本中被重命名为config_is_dataclass_instance,却未同步更新asdict()里的调用逻辑,导致出现未定义的名称错误。

临时解决方案

如果暂时无法升级Python版本,可以通过手动绑定内部函数的方式临时修复:

import dataclasses
dataclasses._is_dataclass_instance = dataclasses.config_is_dataclass_instance

⚠️ 注意:此方案依赖Python内部未公开的函数,后续版本可能会变更,不建议长期使用。

最终解决办法

升级到Python 3.11.2及以上版本,该bug已在后续版本中被官方修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:26:15