使用python模块进行配置有什么明显的缺点吗?

2024-04-20 09:10:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的最后几个程序中,我使用了这种风格的python配置文件

key="value"

contacts = [
    {
         "name": "Herbert",
         "age": 10,
         "height": "120cm"
    },
    {
         "name": "Knight",
         "age": 100,
         "height": "200in"
    }
]

这意味着我可以像这样访问配置:

import config
value = config.key
for person in config.contacts:
    do_thing(person["name"], age=person["age"])

您还可以做一些花哨的事情,比如使用已安装的地址簿程序,或者在运行时决定配置的其他事情。你知道吗

from address_book_interface_module import people.dump_all

key = "value"

contacts = people.dump_all()

再多做一点工作,您还可以让人们编写函数

from address_book_interface_module import people.dump_all

def key():
    if condition:
        return "value"
    else:
        return "toast"

contacts = people.dump_all()

从我的角度来看,这是一个无与伦比的配置和可能性,基本上允许您在配置文件中编写完全功能扩展。你知道吗

然而,这些配置文件几乎从未被使用过。在另一个这样的问题中,这被认为是“不安全的”,然而Django和“可怕的窗口管理器”(它使用Lua)使用它却没有任何问题。你知道吗

这些配置文件的缺点是什么,它们足够重要以至于没有人使用它们?


Tags: keynameimport程序configagevalue配置文件
1条回答
网友
1楼 · 发布于 2024-04-20 09:10:22

这种方法(在任何允许它的语言中)是不安全的,因为编辑配置文件的用户可以添加任意命令,例如删除文件的命令。你知道吗

很多年前,当我第一次开始使用Tcl脚本语言时,Tcl书籍提倡一种类似的方法(即应用程序应该在配置文件中使用Tcl作为语法)。我讨厌这种方法,因为应用程序的用户可能不熟悉Tcl语法,如果用户在他们认为是配置文件的地方打错了字,那么他们会惊讶地看到堆栈跟踪,而不是用户友好的错误消息。你知道吗

另一个问题是,一些配置文件解析器具有模式验证引擎,可以自动检查配置文件内容的错误。例如,有numerous schema validation languages for XML,现在有了schema validation language for JSONConfig4*(我开发的配置解析器)也有自己的schema validator。相反,您的示例Python程序在尝试使用配置数据之前忽略了验证这些数据。因此,如果用户在基于Python的配置文件中输入语法正确但语义不正确的数据,那么结果很可能是程序在执行过程中的任意点崩溃,而不是信息错误消息。你知道吗

相关问题 更多 >