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

Brightway2+Premise调用NewDatabase.update_all()时出现区域匹配错误

问题描述

基于Brightway2、Premise、Ecoinvent、Biosphere数据库及Excel数据开展数字内容消费的LCA分析与场景预测,调用NewDatabase.update_all()创建未来场景时触发ValueError,错误源于ecoinvent_to_iam_location()函数,提示无法匹配ENTSO-E对应区域,且每次报错的区域标识存在差异。为解决依赖冲突,已调整部分包版本,现提供相关代码、报错堆栈及数据库创建日志。

代码片段
from premise import NewDatabase

# 初始化场景数据库
ndb = NewDatabase(
    scenarios=["SSP2-Base"],
    source_db="ecoinvent 3.9.1 cutoff",
    source_version="3.9.1",
    key="my_ecoinvent_access_key",
)
ndb.update_all()  # 触发报错的核心调用
报错堆栈
ValueError: Could not find matching IAM location for ENTSO-E region: [FR]
  File "/usr/local/lib/python3.8/site-packages/premise/location_mapping.py", line 127, in ecoinvent_to_iam_location
    raise ValueError(f"Could not find matching IAM location for ENTSO-E region: {region}")
  File "/usr/local/lib/python3.8/site-packages/premise/new_database.py", line 462, in update_all
    self.update_electricity()
  File "/usr/local/lib/python3.8/site-packages/premise/new_database.py", line 684, in update_electricity
    iam_loc = ecoinvent_to_iam_location(ecoinvent_loc)
数据库创建日志
2024-05-20 10:02:15 - INFO - Loading ecoinvent 3.9.1 cutoff database
2024-05-20 10:07:30 - INFO - Loading Biosphere3 database
2024-05-20 10:12:45 - INFO - Initializing scenario SSP2-Base
2024-05-20 10:18:00 - ERROR - ValueError: Could not find matching IAM location for ENTSO-E region: FR
解决方案

1. 补全区域映射关系

Premise依赖ENTSO-E区域与IAM区域的映射字典,报错说明目标区域未在映射表中定义:

  • 找到premise/location_mapping.py文件,定位ENTSO_E_TO_IAM字典
  • 手动添加缺失的区域映射,示例:
    ENTSO_E_TO_IAM = {
        # 已有映射条目...
        "FR": "R5WEU",  # 需根据实际IAM区域编码调整
        "DE": "R5WEU"
    }
    

2. 验证依赖版本兼容性

即使已调整版本,仍需确认核心包版本匹配Premise官方要求:

  • 运行pip list检查当前包版本,对比Premise文档推荐的兼容版本(如Premise v1.5.x对应Brightway2 v2.4.x、Ecoinvent 3.8+)
  • 若存在版本不匹配,重新安装指定版本:
    pip install premise==1.5.3 brightway2==2.4.5
    

3. 统一Ecoinvent区域格式

Ecoinvent不同版本的区域命名可能存在格式差异(如ENTSO-E FR vs FR):

  • 用Brightway2查询数据库中的ENTSO-E区域格式:
    import brightway2 as bw
    db = bw.Database("ecoinvent 3.9.1 cutoff")
    entso_regions = {act["location"] for act in db if "ENTSO-E" in act["location"]}
    print(entso_regions)
    
  • 将查询结果与ENTSO_E_TO_IAM字典的键统一格式,若数据库区域带前缀,修改映射字典的键为对应格式。

4. 手动传入自定义映射

若Premise支持,初始化NewDatabase时直接传入自定义区域映射:

from premise import NewDatabase

custom_location_map = {
    "FR": "R5WEU",
    "ES": "R5WEU"
}

ndb = NewDatabase(
    scenarios=["SSP2-Base"],
    source_db="ecoinvent 3.9.1 cutoff",
    source_version="3.9.1",
    key="my_ecoinvent_access_key",
    location_mapping=custom_location_map
)
ndb.update_all()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 22:45:57