【问题标题】:Conditional print in python, without writing an IF for each one of thempython中的条件打印,不为每个都写一个IF
【发布时间】:2020-07-19 12:29:08
【问题描述】:

我在代码中写了很多 print(...) 行来验证中间结果。

当你需要它们时它们很方便,但当一切正常时,我需要提交/删除它们中的每一个。有时我发现我可能再次需要它们......然后我必须再次遍历每个 print(...) 行。

那么是否有一个开关可以激活和停用那些 tmp-print 行?同时不影响我一直想激活的其他打印线。

Ps:没有人愿意在每一行都使用 if:

if I_want_tmp_print:

   print("one of my 100 tmp print lines")

【问题讨论】:

  • 是的,使用logging 而不是print 语句。
  • 只需创建一个类似def log(msg) 的函数,将IF 标志放入其中,而不是print 使用log。这样您就可以使用一个标志来启用和禁用它。
  • docs.python.org/3/howto/logging.html - 这是一个很好的例子
  • 不要使用打印语句来调试代码,使用调试器。或者,使用logging 框架,允许您从全局位置打开/关闭日志记录。

标签: python if-statement switch-statement


【解决方案1】:

有时如果我打印足够多并且我想要调试“可切换”,我会编写自己的函数,例如:

def prnt(string):
   print(string)
   return

因此,无论我想检查我的代码,我都会使用我的函数 prnt 来代替。它会为我显示所有的输出。当我不再需要输出时,我将 print(string) 行注释掉,因此不会输出任何内容。

如果您只想停止注释掉代码的某些部分,我将阻止我的代码调用类似的函数,但参考号表明我在代码中的位置。

def prnt(string, idx):
   if idx = 1:
      print(string)
   elif idx = 2:
      print(string)
   elif idx = 3:
      print(string)
...
   return

然后说我发现我在 idx=1 范围内进行测试并且我正在调用 prnt('string to print', 1) 工作正常,我可以注释掉该打印行在我的功能中。

【讨论】:

  • 很好的做法,也适用于prnt("test{}".format(i))
猜你喜欢
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 2021-03-02
  • 2020-11-17
  • 2017-05-08
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
相关资源
最近更新 更多