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
相关产品推荐
相关产品推荐

