异常处理

一、什么是异常

异常是程序运行过程中发生的非正常情况,是一个错误发生时的信号
异常如果没有被正确处理的话,将导致程序被终止,这对于用户体验是非常差的,可能导致严重的后果
处理异常的目的就是提高程序的健壮性

二、异常的结构

 

1. 异常类型:NameError
2. 异常信息: name 'name' is not defined
3. 异常位置:File "C:/Users/wangyong/Desktop/test/练习/test.py", line 1, in <module>

三、常见异常

TypeError: 'int' object is not subscriptable   对象不能被切片
TypeError: 'list' object is not callable      对象不能被调用
IndexError: list index out of range         索引超出范围
TypeError: 'builtin_function_or_method' object is not iterable      对象不能被迭代
KeyError: 'xxx'      不存在这个key
FileNotFoundError: [Errno 2] No such file or directory: 'xxxxx'      文件找不到

四、异常处理

4.1 基本语法

try:
    可能出错的代码
except 出错的类型 as e:  # 将报错信息赋值给变量e
    出错之后的处理机制

4.2 拓展finally

try:
    # 代码块
  
except Exception:  # 万能异常  所有的异常类型都被捕获(代码块报错时执行)
#     print('老子天下无敌')
else: # 代码块没有错误时执行
#     print('被检测的代码没有任何的异常发生 才会走else')
finally: # (最后一定执行)
#     print('无论被检测的代码有没有异常发生 都会在代码运行完毕之后执行我')

五、断言(assert)

断言 其实可以理解为断定的意思
即非常肯定某个条件是成立的
条件是否成立其实可以使用if来判断
其存在的目的就是 为了简化if 判断而生的

l = [1,2,3]
assert len(l) < 0  # 断言  预言
# 猜某个数据的状态 猜对了 不影响代码执行 正常走

六、自定义异常类

# 当系统提供异常类不能准确描述错误原因时 就可以自定义异常类,继承自Exception即可

class MyException(Exception):
  pass
class MyError(BaseException):
     def __init__(self,msg):
         super().__init__()
         self.msg=msg
     def __str__(self):
         return '<dfsdf%ssdfsdaf>' %self.msg

raise MyError('我自己定义的异常')  # 主动抛出异常其实就是将异常类的对象打印出来,会走__str__方法

七、主动抛出异常

当我们做功能的提供者,给外界提供一个功能接口
但是使用者不按照相应的方式来使用,或者参数类型不正确等原因,导致功能无法正常执行时,就应该主动抛出异常
主动抛出异常使用raise 关键字
后面可以跟任何Exception的子类 或是 对象

# 直接抛出异常 
raise TypeError
# 直接抛出异常 并附加错误信息
raise TypeError("类型错误")

 

posted on 2020-05-23 18:39  软饭攻城狮  阅读(140)  评论(0编辑  收藏  举报

导航