try: # 当我们认为某些代码可能会出错时。若执行出错,
检测范围 # 则后续代码不会继续执行,而是直接跳至错误处理代码,即except语句块。
except Exception(上面的常见异常) as e: # 当无法预知会发生哪些异常,可以去掉括号及其中内容去捕获异常原因 e
print('出错啦! \n 错误的原因是:' + str(e))
出现异常后的处理代码(pass:不处理), eg:
print('出错图片的路径:', img_path)
wrong_cnt += 1
continue # 进入下一次循环
finally:
无论如何都会被执行的代码(通常是为了实现不得不执行的收尾工作---比如在程序崩溃前保存用户文档)
# 在需要调试的文件中:import pdb
import pdb
# 在可能出错的地方设置断点:pdb.set_trace()
pdb.set_trace()
# 只需输入括号中的命令即可
list(l):查看当前代码段
next(n):单步调试,不进入函数内部(step over)
step(s):进入函数内部(step into)
查看变量的值:p 变量名/大多数情况可以直接输入变量名查看/查看多个变量用逗号隔开即可
动态设置断点:b+需要设置断点的行号/单打一个b:查看所有的断点编号/cl 编号:清除编号处断点/cl:清除所有断点
return(r):执行代码直到从当前函数返回
continue(c):继续执行程序
jump(j):j+行号,让程序跳转到指定行号
args(a):打印当前函数的实参值
quit(q):终止并退出
logging.critical(msg)
logging.error(msg)
logging.warning(msg)
logging.info(msg)
logging.debug(msg)
CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET
,默认情况下,logging 的日志级别为 WARNING
,只有不低于 WARNING
级别的日志才会显示在命令行logger = logging.getLogger(name)
:logger.setLevel(WARNING)
:指明了记录器能处理的日志消息的最低级别logger.addHandler()
和 logger.removeHandler()
:在记录器对象上添加或者移除处理器对象logger.debug(msg),logger.info(msg),logger.warning(msg),logger.error(msg)和logger.critical(msg)
setLevel()
:指明了处理器将会分发日志的最低级别setFormatter()
:为该处理器选择一个格式化器setLevel()
方法?
addHandler()
方法给它自己添加零个或多个处理器对象
logging.Formatter.(fmt=None, datefmt=None)
I、初始化 logger 配置并定义 log 方法
# coding=utf8
# log.py
import logging
class logger:
# 初始化 logger 配置
def __init__(self, file_path):
# 创建一个 logger 实例,然后设置总的日志最低输出等级
self.logger = logging.getLogger(file_path)
self.logger.setLevel(logging.DEBUG)
# 创建一个 handler,用于写入日志文件,然后设置文件日志最低输出等级
self.fh = logging.FileHandler(file_path) # 默认是追加的方式'a'
self.fh.setLevel(logging.DEBUG)
# 再创建一个 handler,用于输出到控制台,然后设置控制台日志最低输出等级
self.ch = logging.StreamHandler()
self.ch.setLevel(logging.DEBUG)
# 使用格式化器定义 handler 的输出格式,-24 代表 asctime 输出宽度为 24 bytes,左对齐
self.fmt = "%(asctime)-24s %(levelname)s %(filename)s %(lineno)d %(message)s"
self.datefmt = "%a %d %b %Y %H:%M:%S"
self.formatter = logging.Formatter(self.fmt, self.datefmt)
self.fh.setFormatter(self.formatter)
self.ch.setFormatter(self.formatter)
# 给 logger 添加 handler
self.logger.addHandler(self.fh)
self.logger.addHandler(self.ch)
# 记录日志
def log(self, msg):
self.logger.info(msg)
II、记录日志
def get_logger():
local_time = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())
log_path = 'log/' + local_time + '.log' # 使用本地时间作为 log 文件名
log_ins = log.logger(log_path) # 创建一个 log 模块的 logger 类的实例对
log_ins.log('Begin logging...') # 然后调用 log 模块中的 log 方法去记录日志
return log_ins
# 取得日志模块的实例对象
log_ins = get_logger()
# 然后调用 log 模块中的 log 方法去记录日志
info = 'Iteration: [{:6d}/{:6d}] train_loss: {:.6f}, test_loss: {:.6f}, test_acc: {:.4f}'.format(itr, FLAGS.iteration, train_loss, test_loss, test_acc)
log_ins.log(info)
1、logging-advanced-tutorial
2、python logging模块使用教程