Python 中日志记录和防御性编程的缺点

发布日期:2026-07-20 00:48:02  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-20 00:48:02  
0

介绍

要了解并深入了解防御性编程的理论,请查看本系列的第一篇指南

日志记录

日志记录的使用方式与断言语句类似。它可以提供运行时调试信息,并可能改进可执行文档。尽管日志记录并不完全像断言。但它有一些额外的好处。

1. 增加控制粒度

Python 的日志模块非常全面且可自定义。您可以将消息发送到几个不同的级别,每个级别都可以随意打开和关闭。因此,您可能会认为某些情况比其他情况更严重,并可以使用日志级别来规范这种情况。

请记住,断言并非如此,因为它们依赖于调试模式

2. 更加动态的控制

日志记录允许您从几乎任何地方读取日志级别。一些常见位置是配置文件、环境变量或数据库。这种灵活性允许您控制看到的日志信息量,而无需重新运行或重新分发应用程序。

相比之下,Python 不允许您动态地为断言语句分配调试常量。因此,您无法在不重新运行应用程序的情况下打开或关闭断言。

在决定防御性编码策略时,这一点值得考虑。如果您使用PyInstaller之类的“替代”分发机制,动态日志控制尤其重要。

3. 默默保存回溯

发生故障时拥有回溯和调试信息很有用,并且智能日志记录使用几乎可以自动为您完成这些操作。

Doug Hellman在一篇出色的异常处理文章演示了这个概念

      ```python
def main():
    logging.basicConfig(level=logging.WARNING)
    log = logging.getLogger('example')
    try:
        throws()
        return 0
    except Exception, err:
        log.exception('Error from throws():')
        return 1
```
    

log.exception的调用会自动为我们添加异常信息。然后,我们可以配置记录器,将回溯和异常放入单独的日志文件中,以供以后检查,而无需保留所有正常信息和警告。

如果在生产代码中启用,此异常文件可能包含出色的调试信息。这为挖掘这些日志数据开辟了许多令人兴奋的可能性:

  • 发现用户正在尝试我们从未测试过甚至考虑过的功能的不同排列,这可能会导致添加新功能以使常见用例更容易。
  • 查找由于用户对应用程序工作方式的误解而导致的常见错误,从而有助于编写更好的用户文档。

4. 使用断言进行高级组合

您还可以将断言与日志记录结合使用。例如,您可以在默认调试模式下运行应用程序,然后捕获AssertionError并将其记录到另一个文件中。这可以带来更多数据挖掘可能性,例如找出您对所运行平台的环境假设。

这些只是防御性编程环境中日志的一些用途。事实上,您可以使用日志来为各种问题创建低保真解决方案,这又是另一篇文章的主题了。

您甚至可以使用日志记录来构建自己的分析工具。每次使用功能时登录网络或 Dropbox 文件。然后,每次都让 shell 脚本跟在您后面并收集这些文件。现在,您拥有大量以简单文本格式呈现的使用信息,为数据挖掘和帮助用户开辟了大量可能性。

请记住,大多数用户不会填写调查问卷。因此,这是一种收集有关他们尝试使用的功能或常见工作流程的信息的方法。然后,您可以在未来的版本中改进这些功能。

日志记录的缺点

日志记录有许多与断言相同的缺点。但是,日志记录的额外灵活性也带来了需要考虑的额外负担。

1. 难以维持一致的水平

日志记录最困难的部分是在整个代码库中一致地使用可用的级别集。这归结为命名的主观问题,这是计算机科学中仅有的两个问题之一。最好的解决方案是在样式指南中与代码一起提交指南。然后,有一些项目特定的文档供新手在添加日志消息时参考。

2. 多记录器的设计

日志模块非常灵活,但这种灵活性是有代价的。日志配置可能会变得很复杂。考虑以下策略:

  • 调试级别的消息进入名为 .debug 的隐藏文件
  • 信息、警告和错误级别的消息发送到 stderr
  • 关键和异常级别的消息进入 GUI 弹出框

这是一个很好的起点。此外,Python 的文档包含几个很好的日志记录策略,在决定您的设置之前绝对值得一读。

请记住,在追踪棘手的错误时,日志记录可能是您的救星。因此,请花时间学习日志记录系统,并确保仔细设计您的配置。即使是简单的应用程序也值得拥有一个良好、精心设计的日志记录策略。

结论

这种开发风格很难分类,不幸的是,没有任何固定的规则来说明何时使用什么。所以,我鼓励你记住这些指导方针。继续阅读本系列的下一篇指南,了解有关防御性编程单元测试的更多信息。

这些指导方针将导致思维方式发生微妙的变化。思维方式的改变很重要,而不是工具和机制本身。最终,你会因为过度使用断言日志而犯一些错误,并开始形成自己的风格。此外,每个项目的要求都不同,因此学习所有工具并以适合你情况的方式组合它们很重要。

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据