代替配置文件中使用脚本语言乍看起来不错:你有语言的全部功能可用,并且可以简单地eval()或者import它。实际上,有一些陷阱:

它是一种编程语言,需要学习。要编辑配置,您需要充分了解此语言。配置文件通常具有更简单的格式,更容易出错。

这是一种编程语言,这意味着配置可能难以调试。使用普通的配置文件,您可以查看它并查看为每个属性提供了哪些值。使用脚本,您可能需要先执行它才能查看值。

它是一种编程语言,这使得很难在配置和实际程序之间保持清晰的区分。有时您确实想要这种可扩展性,但是到那时,您可能宁愿在寻找一个真正的插件系统。

它是一种编程语言,这意味着配置可以执行编程语言可以执行的任何操作。因此,要么您正在使用沙盒解决方案,而该解决方案否定了该语言的许多灵活性,要么您对配置作者高度信任。

因此,如果您的工具的读者是开发人员,例如Sphinx config或Python项目中的setup.py,则使用脚本进行配置可能就可以了。其他具有可执行配置的程序是Shell(如Bash)和编辑器(如Vim)。

如果配置包含许多条件部分,或者提供回调/插件,则必须使用编程语言进行配置。直接使用脚本而不是eval()-某些配置字段往往更易于调试(请考虑堆栈跟踪和行号!)。

如果您的配置如此重复,以至于您正在编写脚本以自动生成配置,那么直接使用编程语言也可能是一个好主意。但是,也许更好的配置数据模型可以消除对此类显式配置的需求?例如,如果配置文件可以包含稍后扩展的占位符,则可能会有所帮助。有时会看到的另一个功能是具有不同优先级的多个配置文件,它们可以相互覆盖,尽管这会带来一些自身的问题。

在大多数情况下,INI文件,Java属性文件或YAML文档更适合于配置。对于复杂的数据模型,XML也可能适用。正如您已经指出的那样,尽管JSON是一种很好的数据交换格式,但它在某些方面使它不适合用作人类可编辑的配置文件。