将断点与打印调试混合。
breakword的Python项目详细描述
断字
问题的描述
假设您的代码中有一个bug,但它并没有引发异常,您也不完全确定哪里出了问题,所以您开始用print语句来填充代码,以便了解发生了什么。
在某个时候你看到了一些不对劲。你想仔细调查一下。
然而,它似乎发生在某个循环的第174次迭代中,并且您不完全确定如何创建一个断点,在出错的地方触发,而不是以前。不清楚要为断点编写什么条件。你不知道该怎么做,除了打印更多的东西。
现在,如果您有两个命令:
breakword.log()
,打印一些容易识别的单词的函数。breakword.brk(word)
,一个在打印某个单词后中断的函数。
然后只运行一次脚本,看看单词potato
后面发生了什么,然后设置一个断点在单词后面触发,然后再次运行脚本(希望脚本是确定的——如果不是,只有上帝能帮助你)。
这就是图书馆的基本功能。
最小努力API
PYTHONBREAKPOINT
环境变量告诉python看到breakpoint()
时要调用什么。你可以把它设置为breakword.logbrk
来获得一些魔力。
BREAKWORD
环境变量告诉breakword
要中断哪个单词。如果未设置,则除非在python代码中显式指定,否则不会输入断点。
基本上,请执行以下操作:
# Install the library pip install breakword # Run the script without entering a breakpoint env PYTHONBREAKPOINT=breakword.logbrk python yourscript.py # Run the script and break on the word "fish" env PYTHONBREAKPOINT=breakword.logbrk BREAKWORD=fish python yourscript.py
下面是一个屏幕截图,显示它的外观:
稍微多一些努力api
breakword.log(*things, **config)
:打印一个单词,之后还可以选择打印其他内容。breakword.brk(word=None, **config)
:设置在log
打印出给定单词后触发的断点。如果word
是None
或未给定,则会参考BREAKWORD
环境变量。如果未设置变量,则不会发生任何事情。- 这相当于
breakword.after(word).breakpoint()
。
- 这相当于
breakword.after(word=None, **config)
:返回一个对象,该对象的计算结果为True
,就在log
打印出给定单词之后。与brk
一样,如果word
是None
或未给定,则会参考BREAKWORD
环境变量。breakword.word(**config)
:将下一个单词作为字符串返回。您可以自己打印它,在这种情况下,它基本上类似于log
,或者您可以将它存储在一个对象中。breakword.logbrk(**config)
:调用log
,然后调用brk
。breakword.wordbrk(**config)
:调用word
,然后调用brk
。这个词被退回。breakword.set_default_logger(logger)
:设置要使用的日志记录函数(默认为print
)
配置
log
、word
、after
和brk
都采用关键字参数:
group
:表示单词“组”的字符串。每个组是独立的:^ {< CD38>}和^ {CD39>}不会相互干扰,因此可以在代码中添加更多^ ^ {CD11}}语句,而不必更改现有日志所打印的单词。- 你也可以做一些类似的事情:
if after("fish"): log(group="xyz")
。该语句将记录额外的单词,但仅在主序列中的“fish”之后。 - 不同的群体(可能)会有不同的颜色,以帮助区分他们。
- 你也可以做一些类似的事情:
logger
要使用的记录器。默认为默认记录器,即print
。