python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03

异常捕获

异常:程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来

影响:整个程序无法再正常运行

异常的结构

异常的类型

NameError

异常的信息

name 'safaf' is not defined

异常的位置

'''
Traceback (most recent call last):
  File "E:/PyCharm 2019.1.3/ProjectFile/day010/day029/01 异常处理.py", line 1, in <module>
    safaf
'''

异常的种类

语法错误

程序错误编译成一般都会直接有提示,提示就应该直接解决的,出现语法错误一般是基础太差

逻辑错误

这种错误是可以被容忍的,逻辑错误无法一眼看出来

针对逻辑上的错误可以采用异常处理机制来进行捕获

常见的错误类型

常见的出错类型

原因

NameError

名字错误

SyntaxError

语法错误

keyError

键不存在

ValueError

值错误

IndexError

索引错误

如何避免

异常处理

使用:在你认为可能会出现问题的代码上方用 try 包起来

注意:try 内部的代码块越少越好 异常处理能少用就少用,不然该报错的不报错哪里错了你都不知道 像服务端、客户端断开链接就需要用到异常处理,你不知道他什么时候会断开

异常处理使用模板(try.. except.. else.. finally..)

try:
    可能出错的代码
except 出错类型 as e:  # 将报错信息赋值给e
    错误的处理代码
except 出错类型2 as e:  # 将报错信息赋值给e
    错误的处理代码
except 出错类型3 as e:  # 将报错信息赋值给e
    错误的处理代码
    
# 或者 Exception直接捕获所有的
except Exception as e:  # 可以匹配所有的错误类型
    BaseException 是 Exception 的父类,也可以捕获所有类型
    错误的处理代码
else:
    当被检测的代码没有任何异常发生,才会执行这里面的语句
finally:
    无论被检测的代码有没有异常发生,都会在代码执行完后执行这里面的代码

案例

try:
    safaf
except NameError as e:
    print(e)
else:
    print("没有报错才会执行我哦~")
finally:
    print("管你报不报错,我都会执行的!")

# name 'safaf' is not defined
# 管你报不报错,我都会执行的!

try:
    print("我没错哦~")
except Exception as e:  # 捕捉所有异常
    print("管你啥错,我都抓了!")
else:
    print("没有报错才会执行我哦~")
finally:
    print("管你报不报错,我都会执行的!")
# 我没错哦~
# 没有报错才会执行我哦~
# 管你报不报错,我都会执行的!

补充

出错后会立即停止代码运行,去与except中的错误类型一个个比较,匹配上了就执行里面的代码,没匹配上就直接报错

主动抛出异常raise

if 'egon' == 'DSB':
    pass
else:
    raise TypeError('尽说大实话')  # 这一行就是报错的位置
    # raise 关键字就是用来主动抛出异常的

断言assert

断言不成立直接报错

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

 

posted @ 2021-08-10 12:03  愚哦  阅读(138)  评论(0编辑  收藏  举报