验证影响评估方法数据时的错误以及区域特征因素的问题

Error when validating impact assessment method data and issues with regional characterization factors

这个问题与一个有点相关。

我正在尝试在编写方法之前验证新影响评估方法的数据。方法数据包含全球和区域干预措施的特征因素。我创建了一个小玩具示例 here

我正尝试按如下方式验证数据:

my_method = Method(('my method', 'a method', 'oh what a method'))

method_data = [
    (('biosphere', 'global intervention'),1, u'GLO'),
    (('biosphere', 'regional intervention'),1, u'REG')
]

my_method.validate(method_data)

出现以下错误:

MultipleInvalid: expected a list @ data[0]

在未经验证的情况下尝试编写方法时不会出现错误。通过将数据存储在列表而不是元组中可以避免该错误。

这是包中的错误还是我做错了什么?

此外,我正在测试为每个特征因素指定区域标识符(如上数据所示)。这似乎不是必需的,但是当指定 u'GLO' 以外的标识符时,在后续的 lca 计算中不会考虑影响。我在 example notebook.

中对此进行了测试

是否应该避免为特征因素指定区域标识符?

正在验证您的新方法

您需要将 CF“组织”为列表列表,而不是元组列表:

    my_method = Method(('my method', 'a method', 'oh what a method'))
    method_data = [
        [('biosphere', 'global intervention'),1, u'GLO'],    
        [('biosphere', 'regional intervention'),1, u'REG']
    ]
    my_method.validate(method_data)

验证现有方法

假设您想要复制 现有方法,并更新一些 CF(或添加位置或不确定性数据)。您可能会想使用 Method class 的 load() 函数中的方法数据,但此数据不是“有效”格式。

method_data = Method(('CML 2001 (obsolete)', 
    'acidification potential', 'generic')).load()

...
# modify the `method_data`

my_new_method = Method(('my method', 'a method', 'oh what a method'))
my_new_method.validate(method_data) 

这会产生以下错误:



MultipleInvalid                           Traceback (most recent call last)
<ipython-input-27-2fa012f6d12b> in <module>
      2 my_method = Method(('my method', 'a method', 'oh what a method'))
      3 my_method.validate([list(item) for item in method_data])
----> 4 my_method.validate(method_data)

/opt/conda/lib/python3.9/site-packages/bw2data/data_store.py in validate(self, data)
    277     def validate(self, data):
    278         """Validate data. Must be called manually."""
--> 279         self.validator(data)
    280         return True

/opt/conda/lib/python3.9/site-packages/voluptuous/schema_builder.py in __call__(self, data)
    270         """Validate data against this schema."""
    271         try:
--> 272             return self._compiled([], data)
    273         except er.MultipleInvalid:
    274             raise

/opt/conda/lib/python3.9/site-packages/voluptuous/schema_builder.py in validate_sequence(path, data)
    644                     errors.append(invalid)
    645             if errors:
--> 646                 raise er.MultipleInvalid(errors)
    647 
    648             if _isnamedtuple(data):


MultipleInvalid: expected a list @ data[0]

你必须先把它转换成列表的列表:

my_method.validate([list(item) for item in method_data])