异常:
try:
except异常类型,捕获异常 处理异常 也可以嵌套 除了。。。
except Exception as xx:未知错误。如果之前的都没有,就抓所有
else:没有错误
可以写入多个except 捕获异常:
except 异常类型 as xx:——具体的异常信息对象
执行了一个异常后不会继续执行下面的异常
(except(可以写多个异常类型),可以统一执行的时候用,但是不知道具体错误信息)
exception:可以判断所有错误,但不知道是哪一个错误类型,无法定位,建议最后用,语法错误无法抓住,比如缩进
finally:不管有没有异常一定会执行 异常的终结者, 一般把关闭的操作写入这里
遇到return 先看有没有finally,如果有先执行finally在return
exit()退出程序对本身方法没有影响 对下面其他异常的有影响
自定义异常:raise
raise 后面可以自定义异常 用try捕获 输出异常
try:
raise xxxx(" ")
except xxxx as x:
日志:
可以查看日常登录、异常等日志信息,有日志文件,按照日志级别进行打印 导入日志
日志级别:
critical (危急)> error(错误) > warning(警告) > info (信息)> debug(调试),notset(没有设置)
级别越高打印的日志越少,反之亦然,即:
debug : 打印全部的日志(notset等同于debug)
info : 打印info,warning,error,critical级别的日志
warning : 打印warning,error,critical级别的日志
error : 打印error,critical级别的日志
创建示例:
可以创建一个文件(如:a)并按照设定的格式来保存日志信息:
(如果没有创建会默认在当前路径下自动创建,查看文件时需要转成 GBK)
import logging #先导入日志
XXX日志格式 = "%(asctime)s - %(levelname)s - %(message)s"
#输出格式 #日志日期 #日志级别错误类型 #输出日志信息内容
logging.basicConfig(filename='a.txt',level=logging.DEBUG,format=xxx)
#调用固定方法 #输出到a这个文件名里 #level定义级别 #format按照哪个格式去输出
可以定义一个函数方法设定捕获日志:
示例:
def test():
try:
a=int(input("请输入一个被除数:")) #设置一个程序运行
b=int(input("请输入一个除数:"))
print(a/b)
return
except (ValueError): ——#设置出现那种异常 设定导入日志级别
logging.debug("只能输入数字!") ——#输入设定的信息
except ZeroDivisionError: #同上
logging.info("除数不能为0" )
else:
print("else...")
finally:
print("程序结束")
test()
日志格式:
logging.basicConfig()函数中的具体参数:
filename: 指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中;
filemode: 文件打开方式,在指定了filename时使用这个参数,默认值为“w”还可指定为“a”;
format: 指定handler使用的日志显示格式;
datefmt: 指定日期时间格式。,格式参考strftime时间格式化(下文)
level: 设置rootlogger的日志级别
stream: 用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。
若同时列出了filename和stream两个参数,则stream参数会被忽略。
format参数中可能用到的格式化信息:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 "年-月-日 时:分:秒,毫秒"
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s 用户输出的消息
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身