异常
- try与finally
""""""
"""
try...except 捕获异常,执行except代码块内容
try...finally
try;
代码块
finally:
无论是否发生异常,这里的代码都会执行
finally常见于关闭某些资源占用
"""
import logging
logging.basicConfig(level=logging.DEBUG)
def jsuan(m,n):
try:
result=m/n #除法有风险 除数不能为零
return result
except Exception:
logging.error("日志出错了")
return "出现异常"
finally:
print("不管上面是否一异常,这里一定执行")
rs=jsuan(2,0) #除数不能为零,执行异常处理
print(rs)
- 异常描述
""""""
"""
异常:程序执行不下去了,中断当前程序,打印出异常信息
程序代码运行不了
世界不能发生的事
逻辑不通的情况
异常可以处理
捕获异常 try...except
try:
代码块 (可能发生异常的代码)
except 需要捕获的具体异常名称(Exception):
发生异常后,我要去做的事情
"""
import logging
logging.basicConfig(level=logging.DEBUG)
'''
try...except 执行逻辑:首先执行try中的代码块
如果没有异常,except代码块就不执行
而一旦发生异常,中断try中的代码
改为执行except代码
不会爆红 而是执行自定义的异常处理(except中的代码)
'''
def jsuan(m,n):
try:
result=m/n #除法有风险 除数不能为零
return result
except Exception:
logging.error("日志记录,出错了")
return "出现异常"
- 断言
""""""
"""
断言机制:(关键字assert)用于判断某个表达式的结果是否为True
断言用于制造异常
如果表达式返回True 不做任何处理
如果不为True,直接抛出异常(中断程序,出红字)
语法: asscrt 表达式,异常提醒
表达式指的是-- a==b ,a>b, a in b, a not b ...
asscrt后,只需要是一个有bool的返回结果,所以asscrt后面可以接逻辑
"""
# 举例
str="xiaoming"
print(str[0]=="h")
# assert str[0] == "h"
assert str[0] == "h","字符串第一个元素,期望是h,实际是{}".format(str[0])
日志
"""
日志可以封装成一个日志对象(类)
日志的面向对象
"""
import logging
from logging import handlers
class Logger(object):
level_relation={
"debug":logging.DEBUG,
"info":logging.INFO,
"warning":logging.WARNING,
"error":logging.ERROR
}
#日志封装的常规写法,任何地方都可以通用,工作中可以直接复制——模板
#fmt=... -日志的格式/格式化输出
def __init__(self,filename,level='info',when='D',backCount=3,fmt='%(asctime)s -%(pathname)s[line:%(lineno)d] -%(levelname)s %(message)s'):
self.logger=logging.getLogger(filename)
format_str=logging.Formatter(fmt)#设置日志格式
self.logger.setLevel(self.level_relation.get(level)) #设置日志级别
sh = logging.StreamHandler() #向屏幕输出
sh.setFormatter(format_str) #屏幕上要显示的内容
th=handlers.TimedRotatingFileHandler(filename=filename,
when=when,backupCount=backCount,encoding='utf-8')#往文件里面写入指定间隔时间自动生成文件的处理器
th.setFormatter(format_str)#设置文件里面的写入格式
self.logger.addHandler(sh) #logging
self.logger.addHandler(th)
log=Logger("all.log",level="debug")
log.logger.debug("进行运行")
log.logger.info("警告")
log.logger.error("报错")
- 日志与异常结合使用
先得吧日志文件与异常文件放入一个文件夹,然后进入日志文件,引入异常判断
""""""
"""
try...except 捕获异常,执行except代码块内容
try...finally
try;
代码块
finally:
无论是否发生异常,这里的代码都会执行
finally常见于关闭某些资源占用
"""
import logging
from 第十五节课.code.Logging import Logger
logging.basicConfig(level=logging.DEBUG)
log=Logger("all.log",level="debug")
def jsuan(m,n):
try:
result=m/n #除法有风险 除数不能为零
log.logger.info("正常除法") #如果出异常就不会出现这段日志
return result
except Exception:
log.logger.error("除法这里出错了,在21行,jsuan函数中")
return "出现异常"
finally:
print("不管上面是否一异常,这里一定执行")
rs=jsuan(2,1) #除数不能为零,执行异常处理
print(rs)
pychar虚拟环境配置
第一步:进入项目(pychar)—点击文件-点击设置-
第二步:点击项目-点击python解释器 -点击设置
第三步:点击conda环境—选择现有环境-选择你的解释器