为什么Python的日志模块不遵循PEP8规范?

63 投票
1 回答
5891 浏览
提问于 2025-04-18 02:13

这只是出于好奇,想了解一些历史背景:

我在想,有没有人知道为什么这个非常常用的核心模块 logging 不遵循 Python 的 PEP-8 命名规范

比如,在

>>> import logging
>>> log = logging.getLogger("hello")

我本来期待它应该叫 get_logger,但实际上并不是。

关于 函数命名,PEP8 标准说:

混合大小写(mixedCase)只在已经是主流风格的情况下允许使用(例如 threading.py),以保持向后兼容。

这是不是就是情况?如果是的话,它需要和哪些其他的 logging 相关东西保持向后兼容呢?还是说 logging 的开发者就是想用驼峰命名法?

当然,这个模块的文档写得很好,根本不是什么大问题。我只是好奇。

1 个回答

61

logging模块是在2001年由一家独立公司开发的,主要参考了Log4j这个工具。因此,它的命名方式和原作者选择的方式很相似,也和Log4j的选择一致;Log4j也有一个getLogger()方法

直到一年后,PEP 282才提议将这个模块加入到标准库中,这时候命名方式已经固定下来了。

这个模块有一个已知问题,但并不是唯一一个违反PEP的模块。从链接的维基页面来看:

PEP8说 - 遵循这个风格指南的一致性很重要。在一个项目中保持一致性更重要。在一个模块或函数内保持一致性是最重要的。

  • 这确实很重要,但因为要保持向后兼容性,所以不能改变。也许可以考虑logging2。 -- techtonik
    • 现在这不是优先事项,除非有计划确保标准库的其他部分符合PEP8。 -- VinaySajip

最后但同样重要的是,风格指南本身对应用风格指南有这样的看法:

愚蠢的一致性是小心眼的魔鬼

风格指南是关于一致性的。遵循这个风格指南的一致性很重要。在一个项目中保持一致性更重要。在一个模块或函数内保持一致性是最重要的。

但最重要的是:要知道什么时候可以不一致——有时候风格指南并不适用。当有疑问时,使用你的最佳判断。看看其他例子,决定什么看起来最好。并且不要犹豫去询问!

特别是:不要为了遵循这个PEP而破坏向后兼容性!

如果“修复”logging模块,会破坏向后兼容性,这样做是得不偿失的。

撰写回答