调试
学问是异常珍贵的东西,从任何源泉吸收都不可耻。——阿卜·日·法拉兹
抛出异常
有的时候调试过程中你希望在某个位置抛出异常,方便调试
这个时候就需求用到 raise
(1) raise 人为的抛出异常
raise 关键字
对 Exception 函数的调用
传递给 Exception 函数的字符串,包含有用的出错信息
raise Exception("这里有问题")
(2) 必须使用 try except 来接住异常,否则就会直接爆错误
def tryexcept(data):
if data == 1:
raise Exception("这里有问题")
else:
print("这里没有问题")
try:
tryexcept(1)
except:
print("捕捉到异常了")
取得反向跟踪的字符串,然后写入日志
- traceback 利用 traceback.format_exc()
import traceback
def bacon():
raise Exception("这里有问题")
def zhixing():
bacon()
try:
zhixing()
except:
with open("./error.txt", 'w', encoding='utf-8') as item:
item.write(traceback.format_exc())
print("结束了")
- 结果就是把错误信息写入了错误日志里面
Traceback (most recent call last):
File "g:/练习/Python/index.py", line 13, in <module>
zhixing()
File "g:/练习/Python/index.py", line 9, in zhixing
bacon()
File "g:/练习/Python/index.py", line 5, in bacon
raise Exception("这里有问题")
Exception: 这里有问题
断言
断言是一个心智正常的检查,确保代码没有做什么明显错误的事情。这些检查由 assert 语句执行,检查失败抛出异常
assert 关键字:
条件(即求值为 True 或者 False)
逗号
当条件为 False 的时候显示的字符串
一般开发的时候用,这样他就不会抛出异常 而是直接挂掉
def designnum(num):
assert num == 1, '这里num必须是1'
print("不是1的情况")
designnum(1)
designnum(3)
# 结果
# 当为1的时候 才打印出 不是1的情况
# 当为2的时候 直接就爆错误 这里的num必须是1
'''
Traceback (most recent call last):
File "g:/练习/Python/index.py", line 7, in <module>
designnum(3)
File "g:/练习/Python/index.py", line 2, in designnum
assert num == 1, '这里num必须是1'
AssertionError: 这里num必须是1
'''
日志模块
要使用日志模块 就要启用 loggin 模块
基本方法
import logging
logging.debug('debug message') # 最低级别
logging.info('info message') # 用于记录程序中一般事件的信息,或确认一切工作正常
logging.warning('warning message') # 用于表示可能的问题,它不会阻止程序的工作,但是相当会
logging.error('Error message') # 用于记录错误,它导致程序做某事失败
- 使用的时候把日志保存到文件
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='./test.log',
filemode='w')
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
- 结果在当前目录下生成一个 test.log 文件,里面是日志信息
Mon, 06 Apr 2020 10:28:29 index.py[line:8] DEBUG debug message
Mon, 06 Apr 2020 10:28:29 index.py[line:9] INFO info message
Mon, 06 Apr 2020 10:28:29 index.py[line:10] WARNING warning message
Mon, 06 Apr 2020 10:28:29 index.py[line:11] ERROR error message
Mon, 06 Apr 2020 10:28:29 index.py[line:12] CRITICAL critical message
禁用日志
- logging.disable()函数 禁用了这些消息
import logging
logging.disable()
logging.debug('debug message') # 最低级别
logging.info('info message') # 用于记录程序中一般事件的信息,或确认一切工作正常
logging.warning('warning message') # 用于表示可能的问题,它不会阻止程序的工作,但是相当会
logging.error('Error message') # 用于记录错误,它导致程序做某事失败
# 这样的话它后面根本不会输入信息
VSCODE 插入断点
(1) 点击左边蜘蛛,然后点击上方的设置按钮
(2) 它页面上有个蓝色的方框叫 Add Configuration 之类的
(3) 选择后里面选择 Python,点击 Python 后它里面有
Python File
Module
Remote Attach
Attach using Process ID
Django
Flask
Pyramid