You need to enable JavaScript to run this app. PyYAML文档示例用!!python/object构造类实例报错排查
优惠活动
大模型
产品
解决方案
定价
更多

PyYAML文档示例用!!python/object构造类实例报错排查

PyYAML 自定义类实例加载异常整理

在PyYAML官方文档的YAML加载章节中,有如下表述:

即使是Python类的实例,也可以通过!!python/object标签完成构造。

官方给出的交互演示示例代码:

>>> class Hero:
...     def __init__(self, name, hp, sp):
...         self.name = name
...         self.hp = hp
...         self.sp = sp
...     def __repr__(self):
...         return "%s(name=%r, hp=%r, sp=%r)" % (
...             self.__class__.__name__, self.name, self.hp, self.sp)

>>> yaml.load("""
... !!python/object:__main__.Hero
... name: Welthyr Syxgon
... hp: 1200
... sp: 0
... """)

Hero(name='Welthyr Syxgon', hp=1200, sp=0)

本地复现代码

将上述示例逻辑写入本地Python文件尝试运行,代码内容如下:

import yaml

class Hero:
    def __init__(self, name, hp, sp):
        self.name = name
        self.hp = hp
        self.sp = sp
    def __repr__(self):
        return "%s(name=%r, hp=%r, sp=%r)" % (
        self.__class__.__name__, self.name, self.hp, self.sp)

data = yaml.load("""
!!python/object:__main__.Hero
name: Welthyr Syxgon
hp: 1200
sp: 0
""")

运行报错信息

执行上述本地文件时,程序输出的提示与异常堆栈如下:

python objects1.py 
objects1.py:17: YAMLLoadWarning: calling yaml.load() without specifying a Loader parameter is deprecated, as the default Loader is unsafe. Please refer to PyYAML's official usage guidance for full details.
  """
Traceback (most recent call last):
  File "objects1.py", line 17, in <module>
    """
  File "/home/user/miniconda3/envs/yamlPy2/lib/python2.7/site-packages/yaml/__init__.py", line 114, in load
    return loader.get_single_data()
  File "/home/user/miniconda3/envs/yamlPy2/lib/python2.7/site-packages/yaml/constructor.py", line 82, in get_single_data
    return self.construct_document(node)
  File "/home/user/miniconda3/envs/yamlPy2/lib/python2.7/site-packages/yaml/constructor.py", line 86, in construct_document
    data = self.construct_object(node)
  File "/home/user/miniconda3/envs/yamlPy2/lib/python2.7/site-packages/yaml/constructor.py", line 131, in construct_object
    data = constructor(self, node)
  File "/home/user/miniconda3/envs/yamlPy2/lib/python2.7/site-packages/yaml/constructor.py", line 458, in construct_undefined
    node.start_mark)
yaml.constructor.ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:python/object:__main__.Hero'
  in "<string>", line 2, column 1:
    !!python/object:__main__.Hero
    ^

核心疑问

从报错信息判断,!!python/object对应的构造逻辑未被加载,请问这个官方示例缺少了什么必要的前置步骤?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 08:15:09