使用nbtlib向List添加Compound报错:应为End标签,求解决
解决nbtlib创建Compound列表的类型错误
问题原因
你遇到的IncompatibleItemType错误,核心是List的初始化方式错误。nbtlib要求创建List时必须明确指定它要存储的标签类型,而你直接传入Compound()实例,导致库误判这个列表的元素类型为End(NBT格式中,Compound/List的末尾会用End标签标记结束,但这里是类型指定逻辑出错)。
正确写法
初始化List时,要通过类型注解或者tag_type参数指定元素为Compound类型,示例代码如下:
import nbtlib from nbtlib.tag import * # 方式1:用类型注解指定列表元素类型 CpdList = List[Compound]() # 方式2:通过tag_type参数指定 # CpdList = List(tag_type=Compound) Cpd = Compound() Cpd['name'] = String("Name") Cpd['test'] = Byte(0) CpdList.append(Cpd)
关于End标签的说明
End标签是NBT格式的内置特殊标签,作用是标记Compound的键值对、List的元素序列结束,不需要手动添加,nbtlib会在序列化时自动处理。你之前尝试给Compound添加End标签的操作完全没必要,也解决不了问题。
内容的提问来源于stack exchange,提问作者Anthony C
相关产品推荐
相关产品推荐

