异常处理

一、什么是异常

    异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止)

二、异常的分类

  1、语法检测异常  
      解释器在执行程序时,首先检测语法,如果发现有问题,则一行代码都不会执行
  2、运行时异常
      已经通过语法检测,开始执行代码,但是逻辑有问题

print(123)
b



print(123)           检测到语法异常,不会打印123
if    
语法异常与运行异常

三、学习的主要目的:

  在异常发生时不中断程序,提高程序的健壮性

四、异常的种类

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

五、异常的组成

  

  

六、处理异常的基本语法:

 

 语法1  单/多分支  

    try:

      代码

    except type1:

    except type2:
try:
    print("=======1")
    print("=======2")
    print("=======3")
    l = [1,2,3]
    l[100]                            # 发现IndexError,下面代码不再执行
    print("======4")
    d = {'a':1,'b':2}
    d['c']
    print("======5")
except IndexError:
    print("=======6")
print("=======8")

-----------------------------------------------------------

=======1
=======2
=======3
=======6
=======8


二
如果此时是except Keyerror:
=======1
=======2
=======3
View Code
 语法2  多异常合并处理
    try:
    except  (type1, type2, ....):

  语法4  多分支 + 万能异常
    try: 
    except  type1: 
    except  type2: 
    except  Exception  as  别名:

  语法5  try+ else
    try: 
    except  type:
    else:                  #else必须放到后边,会在没有异常的情况下执行

  语法6  try+finally
    try:
      #f = open(“a.txt”,...)     
except type:     finally: #无论异常是否发生,finally后的代码都会执行,一般用于资源回收
      #f.close()

   

万能异常(不建议使用)

try:
    li[1]
    dic['age']
方式一except:
方式二except Exception:  #只执行一个except,只要发现错误,下边的将不会执行
方式三except BaseException:
    print('索引不对')
万能异常

 七、主动抛出异常raise

raise +异常类型(“给出信息”)

raise TypeError("异常信息")

使用场景:需要给用户反馈信息时,比如注册登录,用户名输入数字时,抛出异常,反馈信息

一般与自定义异常连用

 八、自定义异常类

  当系统内置的异常类型无法准确的描述你的错误原因时,继承BaseException

lass MyException(Exception):
    def __init__(self,msg):
        super().__init__()
        self.msg = msg

    def __str__(self):             #__str__
        return "%s" %self.msg

raise MyException("自定义的")

九、断言assert

assert 条件

原文地址:https://www.cnblogs.com/pdun/p/10416768.html