冰淇淋:切勿在Python中再次使用print()来调试

2021-03-30 14:47:05

您是否曾使用print()或log()调试代码? 当然是你。 冰淇淋或IC短,使印刷调试一点更甜。 您有没有打印变量或表达式以调试您的程序? 如果你' veever键入了类似的东西 然后IC()在这里提供帮助。 使用Arguments,IC()检查自己并打印自己的参数和这些参数的值。 您是否曾使用过Print()以确定程序中的哪些部分,以及它们的顺序'重新执行? 例如,如果你'曾经向调试代码添加了涂上的陈词滥调 然后IC()也有助于这里。 没有参数,IC()检查自己并打印呼叫文件名,行号和父功能。 >>> a = 6>>> def一半(i):>>> 返回I / 2>>> B =一半(IC(A))IC | 答:6>>> IC(B)IC | B:3 IC.Format(* args)就像IC(),但输出作为写入stderr的字符串返回。

当然,IC()继续在禁用时返回其参数;没有inc()中的现有码。

要使IC()在每个文件中可用而不需要以Infifife文件导入,可以安装()。例如,在root a.py中:

安装()将ic()添加到内置模块,该模块在解释器导入的所有文件之间共享.Simarimarly,IC()稍后也可以卸载()ED。

IC()也可以以优雅地失败的方式导入IFICream ISN' T安装,如在生产环境中(即NOTDEVELIMMENT)。为此,这款后备进口片段可能会弥补:

尝试:从Icecream Import Ic之外,除了ImportError之外:#如果冰淇淋isn' t安装了正常的回退。 ic = lambda * a:没有否则(a [0]如果len(a)== 1其他a)#noqa

ic.configureoutput(前缀,OutputFunction,ArctoStringFunction,InjectEcontext)可用于采用自定义输出前缀(默认为IC |),更改输出函数(默认为写入stderr),自定义相关参数序列化为字符串, /或包括IC()调用' ic()输出的scontext(文件名,行号和父函数)输出。

>>>进口时间>>>从冰淇淋进口IC>>> >>> def unixtimestamp():>>>返回' %i |> ' %int(time.time())>>>>> IC.CONFIGUREOUTPUT(前缀= UNIXTIMESTAMP)>>> IC('世界')1519185860 |> '世界&#39 ;:'世界'

如果提供的输出功能,请使用IC()' s输出而不是编写为stderr(默认值)的该输出。

如果提供的话,argtoStringFunction会使用Argument值调用BERERIALIZED到可显示字符串。默认值为PrettyPrint' s pprint.pformat(),但这可以更改为例如ackeary时尚的非标准数据类型。

>>>从冰淇淋进口IC>>> >>> def toString(OBJ):>>>如果isinstance(obj,str):>>>返回' [!字符串%r为长度%i!]' %(obj,len(obj))>>>返回ROP(OBJ)>>> >>> IC.CONFIGURUTUTPUT(ARGTOSTRINGFUNCTION = ToString)>>> IC(7,'你好')IC | 7:7,'你好&#39 ;: [!字符串'你好'长度为5!]

IncludeContext(如果提供和True),则添加IC()调用' s文件名,linenumber和父函数到IC()' s输出。

>>>从冰淇淋进口IC>>> ic.configureoutput(InjectEcontext = true)>>> >>> def foo():>>> IC(' str')>>> Foo()IC | example.py:12在foo() - ' str&#39 ;:' str'

如果您在您喜欢的语言中喜欢类似的IC()函数,请打开apull请求!冰淇淋'目标是在每种语言中使用Handy-Dandy IC()函数甜蜜的调试。