如何修改Wurst的extract_exchanges函数提取Brightway数据库formula属性
解决Wurst提取Brightway交换formula属性的正确写法
问题出在你直接用proxy.data.get("formula")会给无公式的交换设置formula: None,导致Activity-Browser误将其识别为参数化交换,触发parametrizedexchange.formula非空约束错误。正确的做法是仅在交换存在有效公式时才添加该字段,同时提取参数化交换的必要关联信息:
修改extract_exchanges函数,在data["type"] = proxy.type下方添加以下代码:
# 提取有效公式及关联参数信息 formula = proxy.data.get("formula") if formula and formula.strip(): data["formula"] = formula # 可选:提取参数名称(如果交换关联了参数) data["parameter"] = proxy.data.get("parameter") # 可选:提取参数缩放系数(如果有) data["scale"] = proxy.data.get("scale", 1.0)
说明:
- 仅当
formula存在且非空字符串时,才将其加入交换数据,避免无公式的交换携带formula: None字段。 - 额外提取
parameter和scale是因为Brightway的参数化交换通常包含这些属性,确保导出回Activity-Browser时能完整还原参数化结构。 - 这样修改后,Wurst提取的交换数据既保留了公式信息,又不会触发数据库约束错误。
内容的提问来源于stack exchange,提问作者xml_life
相关产品推荐
相关产品推荐

