首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Luigi DictParameter KeyError

Luigi DictParameter KeyError
EN

Stack Overflow用户
提问于 2022-05-04 16:27:59
回答 2查看 116关注 0票数 0

我有以下任务

代码语言:javascript
复制
class Test(luigi.Task):
    foo = luigi.DictParameter(default = {})
    ...

我正在使用一个配置文件来运行这个

代码语言:javascript
复制
[Test]
foo = "{'a': 0, 'b': 1}"

我也试过

  • '{'a': 0, 'b': 1}'
  • "{"a": 0, "b": 1}"
  • "{'a': "0", 'b': "1"}"
  • "{'a': 0, 'b': 1}"

他们都失败了

代码语言:javascript
复制
KeyError: '"a"'

代码语言:javascript
复制
KeyError: ''a''

或者是一些相关的键错误。当我使用配置文件时,我应该将字典配置为什么参数呢?

我试过这也是,但即使这样也不起作用。此链接来自修复TOML文件中字典加载的PR。

DictParameter的官方文档中,他们建议

luigi模块my_tasks MyTask -标签

luigi --模块my_tasks MyTask --标记{“角色”:"web","env":“暂存”}‘

但是没有提到TOML文件。即使在它们复杂的示例TOML中,它们也不包含字典。

我不得不说,Luigi是我工作过的最糟糕的项目之一。

EN

回答 2

Stack Overflow用户

发布于 2022-05-05 10:17:36

在开发我们的一个项目时,我遇到了一个类似的问题。不幸的是,我们没有找到在luigi.cfg中包含字典的解决方案,而是使用了一个.yaml文件和luigi.WrapperTask。

我们做了以下工作:

代码语言:javascript
复制
class BaseTask(luigi.WrapperTask):
  with open('/path/to/your/config.yaml') as f:
        foo_dict = yaml.safe_load(f)
  def requires(self):
    yield Test(foo=foo_dict)

class Test(luigi.Task):
 foo = luigi.DictParameter(default = {})

希望能帮上忙。

票数 0
EN

Stack Overflow用户

发布于 2022-06-22 23:55:27

这就是对我有用的东西。

在您的配置文件中,执行以下操作:

代码语言:javascript
复制
blah = "{'a':'b'}"

在你的主文件中,你会

代码语言:javascript
复制
dict_param = luigi.DictParameter()

def run(self):
    parsed_dict_param = dict(eval(self.dict_param))

所以魔法来自于。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72116390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档