一. 异常处理

   1. 异常类型:

    语法错误 : 空格 缩进 语法规则

           应该在我们写代码的时候就避免
   逻辑错误:
       应该在程序当中写代码处理
    条件判断
   异常处理
  2. 常见的报错类型:
AttributeError   试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError   输入/输出异常;基本上是无法打开文件
ImportError   无法引入模块或包;基本上是路径问题或名称错误
IndentationError   语法错误(的子类) ;代码没有正确对齐
IndexError   下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError   试图访问字典里不存在的键
KeyboardInterrupt   Ctrl+C被按下
NameError   使用一个还未被赋予对象的变量
SyntaxError P  ython代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError   传入对象类型与要求的不符合
UnboundLocalError   试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它
ValueError   传入一个调用者不期望的值,即使值的类型是正确的

   3. 异常处理

    

    程序的过程中,如果遇到错误,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,

    为了提高用户体验提高代码的容错性,就要事先处理它让程序不要因为报错而结束.

    基本语法一:
      try:
      被检测的代码块
      except 异常类型:    #捕获异常
      try中一旦检测到异常,就执行这个位置的逻辑

  指定异常类型只能用来处理指定的异常情况,如果非指定异常则无法处理。

    基本语法二:多分支

      s1 = 'hello'
      try:
      int(s1)
      except IndexError as e:  
      print(e)
      except KeyError as e:  #可以有多个except 用来捕获指定异常
      print(e)
      except ValueError as e: #多个except
       print(e)

    基本语法三:万能异常

      s1 = 'hello'
      try:
      int(s1)
      except Exception as e:
      print(e)

    基本语法四:与else,finally连用


s1 = 'hello'
try:
int(s1)
except IndexError as e:
print(e)
except KeyError as e:
print(e)
except ValueError as e:
print(e)
#except Exception as e:
# print(e)
else:                    #如果能确保else下的代码不会报错,可以将这些代码写在try的代码最后,达到的效果一样
print('try内代码块没有异常则执行我')     
finally:
print('无论异常与否,都会执行该模块,通常是进行清理工作')    

   finally : 必须执行
  遇到return也会执行finally中的代码
     遇到exit也会执行finally中的代码
  遇到报错也在程序结束之前先执行finally中的代码

  4. 主动抛异常

  

  try:
  raise TypeError('类型错误')
  except Exception as e:
  print(e)

    可以用在继承上,如果子类没有实现父类的方法就报错

  5.自定义异常:

  

class SelfException(Exception):    #继承万能异常Exception
def __init__(self,msg):
self.msg=msg
super().__init__()        #执行Exception的__init__
def __str__(self):
return self.msg # try:
# raise SelfException('类型错误')
# except SelfException as e:
# print(e)
raise SelfException('类型错误')
'''
raise SelfException('类型错误')
__main__.SelfException: 类型错误 '''

    5. 断言

   assert  条件

assert 1 == 2   一旦条件不成立后面的代码就不再执行 直接报错 (异常处理可以拦截)
...
...
... '''
assert 1==2
AssertionError
'''

二  logging模块

  

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',
            # filemode='w',    #以w模式写入文件  不能同时写入文件和打印在屏幕上
            # filename='test.log'   #文件名
)

logging.debug('debug message') # 调试
logging.info('info message') # 普通信息
logging.warning('warning message') # 警告
logging.error('error message') # 错误信息
logging.critical('critical message')# 严重错误
# 默认情况下 不打印warning以下级别的信息
# 1.中文显示乱码
# 2.不能同时输出到文件和屏幕
logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:

filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为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 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息
logger对象 :
  logger对象的方式来使用logging模块
  首先 先创建logger对象
  第二 创建一个文件操作符
  第三 创建一个屏幕操作符
  第四 创建一个格式   logger 绑定 文件操作符
  logger 绑定 屏幕操作符
  文件操作符 绑定格式
  屏幕操作符 绑定格式

 
import logging
# 用logger
# 首先 先创建logger对象
logger = logging.getLogger()
logger.setLevel(logging.DEBUG) # 第二 创建一个文件操作符
fh = logging.FileHandler('log',encoding='utf-8') # 第三 创建一个屏幕操作符
sh = logging.StreamHandler() # 第四 创建一个格式
fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # logger 绑定 文件操作符
logger.addHandler(fh)
# logger 绑定 屏幕操作符
logger.addHandler(sh)
# 文件操作符 绑定格式
fh.setFormatter(fmt)
# 屏幕操作符 绑定格式
sh.setFormatter(fmt) logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')

												

异常处理--logging模块的更多相关文章

  1. python--类的约束,异常处理,MD5加密,日志处理logging模块

    1.类的约束 在开发中,如果项目经理需要对类进行约束,可以有两种方式 1. 对子类进行约束 Base: #对子类进行约束,必须重写这个方法 # 在工作中发现了NotImplementedError之后 ...

  2. python笔记7 logging模块 hashlib模块 异常处理 datetime模块 shutil模块 xml模块(了解)

    logging模块 日志就是记录一些信息,方便查询或者辅助开发 记录文件,显示屏幕 低配日志, 只能写入文件或者屏幕输出 屏幕输出 import logging logging.debug('调试模式 ...

  3. 以打印日志为荣之logging模块详细使用

    啄木鸟社区里的Pythonic八荣八耻有一条: 以打印日志为荣 , 以单步跟踪为耻; 很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误.警告等信息输出,python ...

  4. python+selenium自动化软件测试(第9章) :Logging模块

    9.1 Logging模块 什么是日志记录?记录是跟踪运行时发生的事件的一种手段.该软件的开发人员将记录调用添加到其代码中,以指示某些事件已发生.事件由描述性消息描述,该消息可以可选地包含可变数据(即 ...

  5. python基础之 异常处理和logging模块

    1.异常处理 l = ['apple','admin','kobe'] for id,item in enumerate(l,1): print(id,item) try: choose_id = i ...

  6. Python中logging模块的基本用法

    在 PyCon 2018 上,Mario Corchero 介绍了在开发过程中如何更方便轻松地记录日志的流程. 整个演讲的内容包括: 为什么日志记录非常重要 日志记录的流程是怎样的 怎样来进行日志记录 ...

  7. python之约束、加密及logging模块

    一.什么是约束? 在生活中的约束大概就是有什么原因,导致你不能做这件事情了,称之为约束.而在python中的约束是在当多个类中,都需要使用某些方法时,需要人为抛出异常或使用基类+异常处理来进行约束 c ...

  8. Python中的logging模块就这么用

    Python中的logging模块就这么用 1.日志日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICALDEBUG:详细的信息,通常只出现在诊断问题 ...

  9. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

随机推荐

  1. 任意N个不同数的逆序对平均值

    在学习数据结构的时候看到了以下定理: 但是老师并没有解释,本着钻研的精神决定搞清楚为什么是这个数. 在百度 google一番之后并没有找到,决定自己试着证明. 最开始走了一些弯路,但突然灵光一闪很容易 ...

  2. Raneto部署知识库平台&支持中文搜索

    目录 环境 更新软件包 部署 Raneto 知识库平台 安装 Node 环境 安装 node 管理工具 查看 node 列表 安装需要的Node版本 使用 淘宝NPM源 git 使用代理设置,大陆地区 ...

  3. jcrop2.X 取消选框

    (原) 官网 0.9.12 API 2.X API 在2.X以下在版本中,api提供了release()方法用于取消选框.但在2.X以上的版本中已经没有这个方法了.于是各种查找,终于解决了如何取消选框 ...

  4. Core官方DI解析(5)-ServiceProviderEngine

    最后来看看前面一直说的Engine(工作引擎),工作引擎接口是IServiceProviderEngine在ServiceProvider的构造函数中看到了根据指定的Mode创建了不同的实现类,下面先 ...

  5. opendir函数和readdir函数内涵及用法

    工作中遇到奇怪的事,加载增量的时候加载不上.于是开始分析原因,log里边没有任何错误信息,只有加载完成的标志.增量的数据在目录里边是存在的,但是显示的目录大小却不是4096,而是17,不知道为什么.后 ...

  6. 1、roboguide新建工程文件

    打开roboguide,软件界面如下,接下来讲解一下“打开和新建工程文件” 首先介绍一下新建工程文件,在工具栏中点击新建按钮或者在文件(file)的下拉菜单中点击新建工程文件(new cell),弹出 ...

  7. Python_range

    range 当作定义的数字范围列表. 满足顾头不顾腚,可以加步长,与for循环结合使用. 一般使用 for i in range(0, 101): print(i) 结果: #[0,1,2,3,... ...

  8. git bash 连接github并提交项目工程

    借鉴博客:https://www.cnblogs.com/flora5/p/7152556.html https://blog.csdn.net/heng_yan/article/details/79 ...

  9. Linux(Ubuntu)使用日记------markdown文档转化为word文档

    Linux(Ubuntu)使用日记------markdown文档转化为word文档

  10. React Native & ES6 & emoji

    React Native & ES6 & emoji && 逻辑运算符 https://developer.mozilla.org/zh-CN/docs/Web/Jav ...