首页 > 解决方案 > ecoinvent 3.5 导入错误:MaybeEncodingError:

问题描述

我试图将 ecoinvent 3.5 cutoff 导入到使用 brightway 的项目中,具有以下内容:

if 'ecoinvent 3.5 cutoff' not in databases:
    ei35cutofflink=r"H:\Data\ecoinvent 3.5_cutoff_lci_ecoSpold02\datasets"
    ei35cutoff=SingleOutputEcospold2Importer(ei35cutofflink, 'ecoinvent 3.5 cutoff')
    ei35cutoff.apply_strategies()
    ei35cutoff.statistics()
    ei35cutoff.write_database() 

但我收到以下错误。看起来问题与brightway无关,而是与多处理或pickle有关?我不明白错误消息的含义。

---------------------------------------------------------------------------
MaybeEncodingError                        Traceback (most recent call last)
<ipython-input-4-f9acb2bc0c84> in <module>
      1 if 'ecoinvent 3.5 cutoff' not in databases:
      2     ei35cutofflink=r"H:\Data\ecoinvent 3.5_cutoff_lci_ecoSpold02\datasets"
----> 3     ei35cutoff=SingleOutputEcospold2Importer(ei35cutofflink, 'ecoinvent 3.5 cutoff')
      4     ei35cutoff.apply_strategies()
      5     ei35cutoff.statistics()

C:\miniconda3_py37\envs\ab\lib\site-packages\bw2io\importers\ecospold2.py in __init__(self, dirpath, db_name, extractor, use_mp, signal)
     63         start = time()
     64         try:
---> 65             self.data = extractor.extract(dirpath, db_name, use_mp=use_mp)
     66         except RuntimeError as e:
     67             raise MultiprocessingError('Multiprocessing error; re-run using `use_mp=False`'

C:\miniconda3_py37\envs\ab\lib\site-packages\bw2io\extractors\ecospold2.py in extract(cls, dirpath, db_name, use_mp)
     91                     ) for x in filelist
     92                 ]
---> 93                 data = [p.get() for p in results]
     94         else:
     95             pbar = pyprind.ProgBar(len(filelist), title="Extracting ecospold2 files:", monitor=True)

C:\miniconda3_py37\envs\ab\lib\site-packages\bw2io\extractors\ecospold2.py in <listcomp>(.0)
     91                     ) for x in filelist
     92                 ]
---> 93                 data = [p.get() for p in results]
     94         else:
     95             pbar = pyprind.ProgBar(len(filelist), title="Extracting ecospold2 files:", monitor=True)

C:\miniconda3_py37\envs\ab\lib\multiprocessing\pool.py in get(self, timeout)
    655             return self._value
    656         else:
--> 657             raise self._value
    658 
    659     def _set(self, i, obj):

MaybeEncodingError: Error sending result: '<multiprocessing.pool.ExceptionWithTraceback object at 0x000001D257C55358>'. Reason: 'TypeError("can't pickle lxml.etree._ListErrorLog objects")'```


标签: pythonmultiprocessingpicklebrightway

解决方案


使用可以use_mp=False用来了解实际错误是什么(而不是错误不是可腌制的,这会引发一个单独的错误)。在这种情况下,我认为您的数据文件夹有问题,您可以通过将其删除并重新下载或解压缩来解决该问题。


推荐阅读