【debugging】-调试
出现bug的原因
调试
-
调试的基本思想:是尽可能的将bug在设计时变得更容易暴露出来,将某些关键的步骤进行可能的可视化。
-
print
- 循环里的第一行print循环变量。可视化循环范围
-
assert -- raise
-
assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。可视化判断表达式的结果
-
表达式成立,不报错,----------不成立——报错(报错的内容argumetns方括号中的可以没有)
-
assert expression [, arguments] # 上下两种表达式相互等价 if not expression: raise AssertionError(arguments)
-
-
-
vs code 调试
- 参数
- request:是最重要的参数,它能选择两种类型,一个是launch模式,一个是attach模式:
launch模式:由VS Code来启动一个独立的具有debug功能的程序。
attach模式:监听一个已启动的程序(其必须已经开启debug模式)。
大多数情况下,调试Python都是用launch模式。少数情况下,你无法通过新建独立程序来调试(如要与浏览器相结合的程序,launch模式会导致你大部分浏览器插件失效),这时候就需要attach模式。 - justMyCode:
true
只调试当前 py 文件,false
也调试引用的模块,当你需要调试模块时请确保将它修改为false
- request:是最重要的参数,它能选择两种类型,一个是launch模式,一个是attach模式:
- 参数
-
logging
-
日志
- 归纳起来日志的作用有三点:
- 进行程序(代码)的调试
- 程序运行过程中的问题定位和分析
- 收集程序运行的情况
- logging中将日志等级分成如下几个(由低到高):
DEBUG
INFO
WARNING
ERROR
CRITICAL
- 归纳起来日志的作用有三点:
-
关键字参数
-
filename
指定使用指定的文件名而不是 StreamHandler 创建 FileHandler。
-
filemode
如果指定 filename,则以此模式打开文件(‘r’、‘w’、‘a’)。默认为“a”。 -
format
为处理程序使用指定的格式字符串。 -
datefmt
使用 time.strftime() 所接受的指定日期/时间格式。 -
style
如果指定了格式,则对格式字符串使用此样式。’%’ 用于 printf 样式、’{’ 用于 str.format()、’$’ 用于 string。默认为“%”。 -
level
将根记录器级别设置为指定的级别。默认生成的 root logger 的 level 是 logging.WARNING,低于该级别的就不输出了。级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG。(如果需要显示所有级别的内容,可将 level=logging.NOTSET) -
stream
使用指定的流初始化 StreamHandler。注意,此参数与 filename 不兼容——如果两者都存在,则会抛出 ValueError。 -
handlers
如果指定,这应该是已经创建的处理程序的迭代,以便添加到根日志程序中。任何没有格式化程序集的处理程序都将被分配给在此函数中创建的默认格式化程序。注意,此参数与 filename 或 stream 不兼容——如果两者都存在,则会抛出 ValueError。这段代码主要是用来配置日志的输出的,代码会将level以上级别日志输出
-
-
当使用
logging
模块时,可以使用不同的日志级别来记录不同严重程度的日志信息。以下是logging
模块中不同的日志级别:- DEBUG:最详细的日志信息,通常只在调试时使用。
- INFO:确认一切按预期运行。
- WARNING:表示发生了一些意外情况或潜在的问题,但程序仍然可以正常运行。
- ERROR:由于更严重的问题,程序无法执行某些功能。
- CRITICAL:严重错误,程序可能无法继续运行。
-
-
pdb