什么是异常?

  • 程序在运行过程中,发生了未知的事件,影响到了程序的正常运行
  • 异常是一种事件
  • 异常会影响到程序正常运行

    第一个异常

    1. a = 10
    2. b = 0
    3. c = a/b
    4. print(c)
    运行程序:
    exception异常 - 图1
    出现了ZeroDivisionError异常
    出现异常会造成程序停止

    异常捕获

    使用try except捕获异常
    1. try:
    2. 代码
    3. except:
    4. 出现异常的代码
    代码:
    1. try:
    2. result = a / b
    3. print('没有异常',result)
    4. except:# 如果代码有异常会执行 ,没有异常并不会执行
    5. print('出现了异常')
    可以捕获异常的类型
    1. try:
    2. result = a/b
    3. print('没有异常',result)
    4. except Exception as error:# 如果代码有异常会执行 ,没有异常并不会执行
    5. print('出现了异常',error)

    finally

    try语句中使用finallyfinally中代码不论有没有出现异常都会执行
    格式:
    1. try:
    2. 逻辑代码
    3. finally:
    4. 无论是否出现异常,都会执行
    例如:
    1. try:
    2. a = 1 / 0
    3. print("异常之后的代码", a)
    4. finally:
    5. print("finally里的代码")
    程序出现异常也会执行finally中的代码

    try except finally语法

    格式:
    1. try:
    2. 逻辑代码
    3. except Exception as error:
    4. print(error)
    5. finally:
    6. 无论是否出现异常,都会执行
    例如读写文件: ```python f = open(‘a.txt’,’w’)

try: f.write(‘hello’)

  1. # 出现异常
  2. a = 10
  3. b = 0
  4. re = a/b

except: print(‘出现异常’) finally: # 即使程序出现异常 finally里面的代码也可以继续执行

  1. # 必须要关闭 内存泄漏
  2. f.close()
  3. print('文件已经关闭了')
  1. 无论文件是否操作失败,最终都需要关闭文件<br />所以把文件关闭的方法放到`finally`
  2. <a name="ADNO6"></a>
  3. ## try except else finally语法
  4. 格式:
  5. ```python
  6. try:
  7. 逻辑代码
  8. except Exception as error:
  9. print(error)
  10. else:
  11. 没有出现异常的逻辑
  12. finally:
  13. 无论是否出现异常,都会执行

例如:

  1. a = 10
  2. b = 0
  3. try:
  4. result = a / b
  5. print(result)
  6. except:
  7. print('出异常')
  8. else:
  9. print('没有出异常')
  10. finally:
  11. print('最终执行的代码')

多重捕获

  1. try:
  2. a = 1 / 0
  3. b = [1, 2]
  4. c = b[4]
  5. except IndexError as error:
  6. print("indexerror 错误逻辑")
  7. except ZeroDivisionError as error:
  8. print(error)

可以通过多个except捕获不同的异常分别处理

常见的异常类型

IndexError

数组下表越界异常

  1. # 角标越界异常
  2. lst = [10, 20, 30]
  3. print(lst[6])

image.png

KeyError

字典中键不存在

  1. # KeyError 字典中 的键不存在
  2. d = {'name':'张三','age':30}
  3. print(d['phone'])

image.png

ValueError

值类型错误

  1. # ValueError 数据转换时出错
  2. str = 'abc'
  3. print(int(str))

image.png

AttributeError

对象中属性、函数不存在

  1. class Person:
  2. def __init__(self):
  3. self.name = '张三'
  4. self.age = 30
  5. p = Person()
  6. print(p.id)

image.png