使用configparser检查首选项

时间:2013-06-22 12:46:12

标签: python configparser

我有一个可以使用某些用户首选项启动的应用程序。为此,我使用内置包ConfigParser中的ConfigParser类。我派生了ConfigParser的子类,它实现了__getitem____setitem__方法,以便获取/设置一些首选项,而无需每次指定各自的部分,子部分和选项。

由于其中一些首选项(工作目录,日志记录级别......)对我的代码非常敏感,我想在每次修改其中一个项目时检查它们。为此,我目前考虑两种方法:

  1. 编写一个方法,每次修改其中一个项目时检查我的每个项目。非常简单,但效率不高,因为每次更改一个项目时,都会检查整个首选项。

  2. 为每个首选项(check_logger,check_working_directory,check_blabla ...)编写check_item方法,每次设置一个项目时,将使用getattr(self,'check_%s' % item)(item)

    我倾向于认为第二种方法比第一种方法更好。

    你会看到这些设计的一些替代品吗?

    非常感谢

    埃里克

1 个答案:

答案 0 :(得分:1)

根据规则的复杂程度(以及编写/将编写它们的人),您可以:

  • 将它们实现为纯Python;
  • 使用像BPEL这样的(商业)规则语言。 Python通过PyPEL项目支持此功能;
  • 使用基于约束的系统检查它的值集不会直接或间接违反任何规则。例如,您可以查看python-constraint。这更像是一种“求解器” - 但如果没有给出“偏好”的解决方案,它会通知你。

对于简单到中等复杂的约束,第一选择会有我的好处。但是请注意,就像我在评论中解释的那样,我不认为“一次检查一个项目”的方法是有效的 - 除了最简单的情况。这是因为某些项目值可能有效,也可能无效,具体取决于一个或多个其他项目的值。追踪值可能间接破坏的规则并不容易。