【问题标题】:How to organize a Python module with lots of constants and exceptions?如何组织一个包含大量常量和异常的 Python 模块?
【发布时间】:2013-05-05 01:33:04
【问题描述】:

我正在编写一个 Python 模块,它只有大约 20 个有趣的类型和全局方法,但有很多常量和异常(大约 70 个语言环境常量、60 个编码常量、20 个格式化属性、200 多个异常等等)在)。结果,此模块上的help() 产生了大约 16,000 行文本,并且对每个异常都有几乎相同的描述。常量的要求并不高,但仍然很难驾驭它们。

组织这样一个模块的pythonic方法是什么?保持原样并依赖其他文档?将常量移动到单独的字典中?进入子模块?在适当的地方将它们添加为类级常量?

请注意,这是一个 C 扩展,因此我无法在此处轻松添加真正的子模块。我听说sys.modules 并没有真正检查对象是否有模块,所以可以在那里添加字典;这样我可能会创建mymodule.localesmymodule.encodingmymodule.exceptions,并在导入我的模块时将它们添加到sys.modules。这是个好主意还是太老套了?

【问题讨论】:

  • 超过 200 个异常似乎远远超过了顶部 - 我想不出有这么多异常的任何 python 库。
  • 我在这里同意@brunodesthuilliers。 Python 标准库本身没有定义超过 60 个异常。
  • 如果很多异常都有这样相似的描述,为什么不把相似的合二为一呢?
  • 这些不是这个模块的例外,它们来自宿主应用程序。我只是为每个错误代码添加一个异常。我不认为我可以将它们结合起来,因为如果我这样做了,我该如何识别它们?

标签: python exception constants organization


【解决方案1】:

确实有两种方法可以解决您的问题。第一种方法是对所有常量和异常进行分类,并具有较少数量的更广泛的类别。这将允许您轻松导航到您想要的类别。字典(或者可能是嵌套字典)将是实现这一点的好方法,因为您可以维护其中包含标题的组。如果您想更多地自定义管理,您可以这样做的第二种方法是创建一个有点像字典的类。它将有一个子对象列表。这样,您可以创建独特的、更易于访问的方法来浏览所有常量和异常,例如处理几个类似异常的新异常类。另一种使其更简洁的方法(需要访问源代码)是将所有这些异常放入一个较小的异常组中,每个异常组可以处理类似问题的组。这可能是处理异常的更好方法,但您可能无法访问源来修改它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2012-11-30
    • 2010-11-20
    • 1970-01-01
    • 2013-12-12
    相关资源
    最近更新 更多