异常:
  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                     当前时区的名称


     %%                    %号本身