【问题标题】:Using print statements only to debug in one line [closed]仅使用打印语句在一行中进行调试[关闭]
【发布时间】:2020-07-21 23:02:20
【问题描述】:

扩展问题 - Using print statements only to debug

我喜欢这个全局调试/测试变量的想法。还有一个功能,你有很大的灵活性,比如稍后添加时间等。

DEBUG = True

def log(s):
    if DEBUG:
        print s

如果我想跳过函数调用,使用这样的打印有什么优点和缺点:

DEBUG = True

print('Yellow') if DEBUG else None

【问题讨论】:

  • 这是一个有用的功能。不仅用于打印报表。您可能希望查看预处理器来处理此类变量。看到这个:stackoverflow.com/questions/13352677/…
  • 您使用三元条件表达式的方法仅适用于定义的短路行为,但更传统(和更短)的单行将是if DEBUG: print("Yellow")

标签: python


【解决方案1】:

回复否决票,因为我曾使用过许多编程语言的许多程序,这些程序正是采用这种方法。

不过,更一般地说,您更喜欢使用 Python 的 logging 工具来处理消息,而不是难以控制的打印语句。

您还需要像往常一样注意您的“日志记录语句”不要无意中某些事情,这样当您关闭开关时程序的行为就会发生变化。

【讨论】:

    【解决方案2】:

    这真的取决于你的要求:

    如果您只想打印示例中的简单字符串,则跳过函数调用可能没问题。

    但是如果你想添加元数据,比如时间戳或标签,会发生什么?

    将您的日志记录代码包装在一个函数中可为您带来以下优势:

    • 无需重写格式化代码即可格式化日志输出
    • 您可以轻松拥有一种以上类型的登录,并选择哪种类型处于活动状态(错误、警告、调试、信息)
    • 如果将来需要,您可以轻松地将 print 更改为其他内容,例如写入文件,或写入 stderr 而不是 stdout
    • 您的代码会更清晰,因为很明显什么是日志,什么是输出
    • 您将不得不输入更少

    您提供的示例仅适用于琐碎代码和琐碎调试,但由于您想使用变量控制调试,显然您拥有的不仅仅是琐碎的脚本。

    因此,如果您出于某种原因仍然不想使用正确的日志记录库,请至少将您的日志记录代码包装在适当的函数中,否则您可能会降低代码的可读性和可维护性。

    【讨论】:

      【解决方案3】:

      优点

      • 您的调试会更好

      缺点

      • 您不应该在许可证验证等严重情况下使用它
      • 在 python 中使用 logger 记录对于这种情况要好得多,您可以将其隐藏为 .file
      • 其他人会发现它不是很好的调试方式,因为它非常业余
      • 如果你不做一些格式,区分真实输出和调试会更糟

      总结

      这种方式对于小型业余项目是可以接受的,但我认为你应该考虑使用 logger 并开始在你未来的项目中使用它,这样你就知道如何使用它了。 使用 Debug 变量可能很有用,但请记住,如果您多次声明它或在错误的位置声明它可能会很危险。

      【讨论】:

        猜你喜欢
        • 2011-09-28
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        • 2021-08-07
        • 2023-03-16
        • 1970-01-01
        • 2018-02-09
        • 1970-01-01
        相关资源
        最近更新 更多