验证影响评估方法数据时的错误以及区域特征因素的问题
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])
这个问题与
我正在尝试在编写方法之前验证新影响评估方法的数据。方法数据包含全球和区域干预措施的特征因素。我创建了一个小玩具示例 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])