Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python文档字符串中存储配置默认值?_Python_Docstring - Fatal编程技术网

在Python文档字符串中存储配置默认值?

在Python文档字符串中存储配置默认值?,python,docstring,Python,Docstring,我有一个包含许多模块的Python应用程序。有一个YAML配置文件,其中包含每个模块的配置设置。在每个模块的init()中,我加载配置,然后将其处理到该模块的配置字典中 现在的处理过程很糟糕。在每个模块的开头有很多很多行,其中包括: if 'foo' not in config: config['foo'] = bar 或 等等 现在我想编写一个每个模块都可以使用的集中式配置处理方法。我想我想使用一个YAML格式的字符串来指定最终的配置应该是什么样子。(哪些设置是必需的、默认值、对象类

我有一个包含许多模块的Python应用程序。有一个YAML配置文件,其中包含每个模块的配置设置。在每个模块的init()中,我加载配置,然后将其处理到该模块的配置字典中

现在的处理过程很糟糕。在每个模块的开头有很多很多行,其中包括:

if 'foo' not in config:
    config['foo'] = bar

等等

现在我想编写一个每个模块都可以使用的集中式配置处理方法。我想我想使用一个YAML格式的字符串来指定最终的配置应该是什么样子。(哪些设置是必需的、默认值、对象类型等)

我认为每个模块中的配置规范可以是这样的:(使用类型| default |必需值)

到目前为止,一切顺利。我真正的问题是,是否有任何方法可以将配置规范内容保存在init()或其他内容的docstring中的每个模块中。我在想,既然我基本上是在定义模块对其配置的期望值,以及默认值和类型,那么如果我可以将这个配置存储在docstring中,那么我应该能够编写一些东西和/或配置sphinx,以便为文档整理它

所以我想知道这种方法总体上听起来是否合理,如果是的话,是否有一种方法可以将配置信息存储在docstring中以使其作为双重任务工作

编辑:我考虑先设置一个带有默认值的字典,当然这会考虑默认值。但在很多情况下,我需要将值设置为某种类型。例如,可能有些必须是列表,但如果在配置文件中输入单个项,它将被读取为字符串,因此我需要配置处理器将该字符串转换为列表,并将该字符串作为其唯一项

编辑2:我询问docstring的原因是因为我认为我的配置规范基本上会告诉程序员这个模块在配置字典方面期望什么,因此,如果我可以在docstring中完成,那么我可以只指定一次,让模块将其用于配置,并将其显示在sphinx文档中。但如果这不可能,那就这样吧。我可以在变量中使用它(如上面的示例),然后手动编写docstring

谢谢!
Brian

这似乎不是docstring的恰当用法。为什么是docstring而不仅仅是包含字符串的变量?(另外,YAML支持本机列表-为什么要进行字符串转换?)更明智的方法可能是使用所有默认值默认字典,然后使用从配置解析的值字典对其调用
.update()
,覆盖实际设置的任何设置。在您的示例中,config_模板不是docstring。这是一个三引号字符串。DocString通常是三重引号,因为三重引号有助于跨多行定义字符串文字,而不需要显式的行继续(trailing\characters)顺便说一句,定义一个包含YAML或JSON的Python多行字符串并没有错。如果您真的想在文档中使用该字符串,请将其分配给name
。\uuuuuuuu doc\uuuu
if 'foo' in config:
    config['foo'] = string_to_list(config['foo'])
else:
    config['foo'] = list()
config_template = """MySection:
                       setting1: int|0
                       setting2: string|None|required
                       setting3: int|10"""