Ⅰ 异常处理
什么是异常
异常是错误发生的信号,一旦程序出错就会产生一个异常
错误又分为两类
语法错误:python语法问题例print( 少一个括号(傻叉问题)(任何程序都不会运行)
逻辑错误:如dlskf,这个变量未定义就被引用
如果该异常没有被处理,该异常就会被抛出来,程序的运行随机终止
异常是有三部分组成的
抛出异常的具体代码行
异常种类
NameErroe:变量未事先定义
IndexError:索引不存在
KeyError:字典取值key不存在
AttributeError:对象属性不存在
异常的内容信息
例一
s1 = 'hello' # 定义个字符串
try: # 添加try异常处理功能
res = int(s1) # 此地代码应该认为是顶级代码
print(res)
异常处理功能结束代码 需要指定异常分类 ValueError
except ValueError as e: # 将异常信息关联指变量e
print(e) # 可以打印e或者进行其他操作
例二
s1 = 'hello'
try:
int(s1)
except IndexError as e: # 取值索引超出
print(e)
except IndentationError as e: # 语法错误
print(e)
except ValueError as e: # 传入的值不正确
print(e)
为何要处理异常
为了增强程序的健壮型
我们常用的if判断就是用来预防异常问题的
age = input('请输入年龄:').strip()
if age > 18: # 这里变量age等于是字符串无法比较
print('猜大了')
age = input('请输入年龄:').strip()
if int(age) > 18: # 我们使用int转换成整型,但是如果用户输入非数字呢
print('猜大了')
所有又增加了判断条件
if age.isdigit(): # 我们判断当输入为数字的时候再进行转换
if int(age) > 18: # 当输入数字的时候这里就可以比较了,还不够完善,如果输入的是带小数的数字呢?
print('猜大了')
如何处理异常
针对语法错误:应该在程序运行前立即改正
针对逻辑错误:
如果逻辑错误发生的条件是可以预知的,应该用if判断解决
如果逻辑错误发生的条件是不可预知的,那么异常一定会发生,考虑到程序的健壮型我们应该处理异常,做好补救措施
例5 万金油
try:
print('===>1')
print('===>2')
print('===>3')
l = []
l[2] # 索引取值超出
dic = {}
dic['k1'] # 字典取值键不存在
print('===>4')
except Exception as e: # 一个代码全部处理,但是无法处理语法错误
print('万能异常处理', e)
print('55555')
主动触发异常
raise NameError('异常信息') #会自动抛出异常#通常用来定制规范(相比提示信息更强势)
例 6 主动触发异常
class Animal:
def speak(self):
raise BaseException('必须实现speak方法来覆盖')
def run(self):
raise BaseException('必须实现speak方法来覆盖')
class Dog(Animal): # 继承父类 就拥有了父类的共功能
pass
class Pig(Animal): # 继承父类 就拥有了父类的共功能
pass
a = Animal()
d = Dog()
p = Pig()
d.speak() # 但是子类调用会报错,不允许使用
p.run() # 但是子类调用会报错,不允许使用
单纯的这样写,都不可使用了,但我们可以再里面加上判断条件,
当子类来调用时就抛出异常
自定义异常信息
class Interface(BaseException):
def init(self,x,y):
def str(self):
return self
raise Interface('接口异常',11,12)#直接raise类实例化,在类里打印信息
自定义异常类型
class Interface(BaseException):
def init(self, msg, x, y, z):
self.mag = msg
self.x = x
self.y = y
self.z = z
def __str__(self): # 必须返回值,一般用于类的描述性信息
return '%s:%s:%s' % (self.mag, self.x, self.y)
obj = Interface('接口异常', 11, 22, 33)
raise obj
断言
if len(x) !=3 :
raise NameError#上方代码条件成立,运行此代码后,下方全部代码不会运行
assert len(x) == 3:
当条件成立才会继续运行后续代码
断言
print('1111111')
print('2222222')
print('3333333')
l = [1, 23, 4,4,3]
if len(l) != 4: # 当列表l的元素不为4的时候,后续的代码不会被执行,
# 再当前位置直接抛出异常
raise NameError
assert len(l) == 5 # 当满足某种条件情况下才会继续运行下方代码
print('444444')
print('444444')
print('444444')
print('444444')
print('444444')
print('444444')
我断言怎么这么样,才会继续执行代码
我断言不怎么这么样,就会继续执行代码
我说了算
套接字编程 #socket编程
什么是socket
网络基础(⭐⭐⭐ ⭐⭐⭐)==>socket
为何要学习scoket编程:
基于socket开发一个C\S或者B\S结构的软件
Client---------网络---------Server
Browser---------网络-------Server
如何基于socket编程
网络是什么=底层的物理链接介质+互联网通信协议
OSI 七层协议
应用层
应用层①
表示层②
会话层③
传输层④
网络层⑤
网络接口层
数据链路层⑥
物理层⑦
网友评论