IceCream — 不再使用 print()进行调试

简介: IceCream — 不再使用 print()进行调试

IceCream — 不再使用 print()进行调试


IceCream就像print,但提供了更甜蜜的输出。你可以直接用ic替代原来的print

相较于printicecream具有以下优势:

  1. 方便地打印变量值和名称
  2. 通过色彩和缩进更好地输出结构化的数据(如嵌套的字典)。
  3. 可以通过配置输出程序上下文信息,如文件名、行号和父函数等。

下面我们比较一下printic:

from icecream import ic
a = {"日期":"2024-2-12", "温度":15, "xx":[1,2,3,4,5,6]}
b = {"日期":"2024-2-12", "温度":15, "xx":[1,2,3,4,5,6]}
c = [a,b]
print(c)

ic(c)

运行结果:

相较于printic提供了更易读的输出。

下面是ic的一些常用用法,完整的文档可以查看https://github.com/gruns/icecream。基本上print能做的事情,ic都可以做的更好。

为了节省空间,下面代码省略了

from icecream import ic

  1. 输出变量
def foo(i):
    return i + 333

ic(foo(123))

d = {'key': {1: 'one'}}
ic(d['key'][1])

class klass():
    attr = 'yep'
ic(klass.attr)
  1. 查看函数执行过程
def foo(a):
    ic()
    if a % 2 == 1:
        ic()
        b = True
    else:
        ic()
        b = False
    return b

is_odd = ic(foo(12))

运行结果:

  1. 禁用/启用ic输出
    可以通过ic.disable()ic.enable() 禁用,启用ic的输出。
ic(1)

ic.disable()
ic(2)

ic.enable()
ic(3)

运行结果:

  1. 配置
    可以通过
    ic.configureOutput(prefix, outputFunction, argToStringFunction, includeContext, contextAbsPath)
    配置ic的输出。
  • prefix:前缀,是一个字符串或返回字符串的函数。默认值是ic|
  • outputFunction:是一个接收字符串的函数,如果提供,则用ic的输出调用该函数。默认值是stderr
  • argToStringFunction:一个函数,返回对象的字符串形式。默认值是pprint.pformat()
  • includeContext:是否包含上下文信息。如果为True,则将ic()调用的文件名、行号和父函数添加到输出中。默认值是 False。
  • contextAbsPath:上下文绝对路径。如果为True,则输出绝对文件路径。默认值为False。

例如,下面通过设置outputFunction将信息输出到文件中。

from icfrom icecream import ic
import time

def add(a, b):
    return a + b

def to_file(s):
    with open('debug.txt', 'a') as f:            
        f.write( 
            time.strftime("%c", time.localtime())+
            ' ' + s + '\n')

ic.configureOutput(prefix="Debug|", outputFunction=to_file,
                   includeContext=True)

ic(add(11,22))

相关文章
|
7月前
|
Python
python pyqt5 cmd 命令行 控制台 打印 print 输出 显示打印内容 实时显示 界面
python pyqt5 cmd 命令行 控制台 打印 print 输出 显示打印内容 实时显示 界面
236 0
关于 C#使用Console.WriteLine调试没有命令行输出 的解决方法
关于 C#使用Console.WriteLine调试没有命令行输出 的解决方法
关于 C#使用Console.WriteLine调试没有命令行输出 的解决方法
|
4天前
|
JSON 数据格式 索引
Python内置函数如`print()`输出信息,`len()`计算长度
【6月更文挑战第23天】Python内置函数如`print()`输出信息,`len()`计算长度,`type()`识别类型,`range()`生成序列,`sum()`求和,`min()`和`max()`找极值,`abs()`取绝对值,`round()`四舍五入,`sorted()`排序,`zip()`和`enumerate()`组合及遍历,`map()`和`filter()`应用函数。标准库如`os`用于操作系统交互,`sys`处理解释器信息,`math`提供数学运算,`re`支持正则表达式,`json`处理JSON数据。学习这些能提升编程效率。
18 5
|
9月前
|
Swift
Swift Debug 和 Release 中 print() 函数调试切换
Swift Debug 和 Release 中 print() 函数调试切换
47 0
Python print() 打印两个 list ,实现中间换行
Python print() 打印两个 list ,实现中间换行
|
9月前
|
Python
Python输出函数print
Python输出函数print
35 0
|
Python
一日一技:print函数也能写文件
一日一技:print函数也能写文件
110 0
|
存储 Java C语言
【python】输入以及print()函数的三种输出方式
【python】输入以及print()函数的三种输出方式
290 0
【python】输入以及print()函数的三种输出方式
|
Python
笨办法学 Python--跟书练习九~打印 打印 打印
笨办法学 Python--跟书练习九~打印 打印 打印
笨办法学 Python--跟书练习九~打印 打印 打印