异常处理、套接字编程

一、异常处理:

1.1 什么是异常:

错误发生的信号,一旦程序出错就会产生一个异常
如果该异常没有处理,该异常就会被抛出来,程序的运行随机被终止
① 异常处理的三个组成:

​	异常追踪信息(具体哪一行代码抛出的的异常)、
​	异常的种类、
​	异常的内容信息

② 异常的类型:

NameError:引用了一个不存在的名字
AttributeError:访问了对象所没有的属性
IndexError :索引超出范围
KeyError:字典的key不存在
ValueError:传入的值的类型不正确
TypeError:传入对象的类型与要求的不符合
ZeroDivisionError:除数是0
IOError:输入/输出异常
ImportError:无法引入模块或包(一般是路径或者名称错误)

1.2 为何要处理异常:

为了增强程序的健壮性

1.3 异常处理:

1.3.1 针对语法的错误:

应该在程序运行前就立即改正

1.3.2 针对逻辑错误:

① 如果逻辑错误发生的条件是可以预知的,应该用if判断的形式处理(在错误发生之前进行预防)

 age = input('>>: ').strip()
 if age.isdigit():
 	age=int(age)
	if age > 18:
    	print('too big')
    elif age < 18:
        print('too small')
    else:
        print("got it")
    else:
        print('必须输入数字')

② 如果逻辑异常发生的条件是不可预知的,考虑到程序的健壮性,应该用try…except:(在错误发生之后进行处理,做好补救措施)

	try:
		代码块(顶级代码)
	
	except 异常的类型:
		发生异常后要处理的代码

ps:异常抛出后会跳过同级别的后续块,直接到处理代码块
异常处理完毕会继续运行【处理代码】后续的代码

try:
    print("====>111")
    print("====>222")
    x = 5
    dic={}
    dic["k1"]
    print("====>333")  # 因为上面的代码出现了逻辑错误,此行代码不会运行
    x = 10  # 同上,不运行
except (NameError,IndexError) as e:
    print("=---->",e)
except KeyError as e:
    print(e)  # 'k1'

print('====>4')
print(x)  # 5
1.3.3 finally

注意点:代码块一定会运行
应用场景:通常被用来做清理工作,如关闭文件对象等
语法示例:

try:
    print("====>111")
    print("====>222")
finally:
    print("====>3")
print('====>4')
1.3.4 万能处理

try … except exception

try:
	print('xxx')
	xxx
	print('hello')
except exception as e:
	print(e)

print(123) # 此行代码会继续运行
1.3.5 raise

作用:主动抛出异常
应用场景:在需要被覆盖定义的场景下使用,如果没有被覆盖就会报错
示例:(鸭子类型——自定义异常来约束规范)
如父类中定义的函数是提供标准的,不是给对象调用的,子类应该分别自定义函数覆盖使得子类的对象调用各自的函数:

class Animal:
    def speak(self):
        raise BaseException("小垃圾必须实现speak方法来覆盖")

    def run(self):
        raise BaseException("小垃圾必须实现run方法来覆盖")

class Dog(Animal):
    def speak(self):
    	return '汪汪汪'
    	
    def run(self):
    	return 'pia pia pia'
    	
class Pig(Animal):
    pass

d=Dog()
p=Pig()

d.speak()  # 正常运行
d.run()   # 同上

p.speak()  # 报错,因为没有定义speak函数来覆盖父类的函数
p.run()  # 同上
1.3.6 assert 断言

作用:确保上面的代码满足定义的断言条件,否则抛出断言异常AssertError
应用场景:在协同开发程序的时候,前半段程序中的数据要与后面的数据耦合,在测试的时候可以使用断言来验证一下

names = ['cc', 'dd', 'ee']
assert len(names) == 3 # 确保上面定义的names列表有三个元素,否则抛出AssertError异常
print(names[2])
1.3.7 总结try…except:
① 把错误处理和真正的工作分开
② 代码更易组织、结构更加清晰,复杂的工作任务更容易实现
③ 提高程序的健壮性,使程序更加安全, 不至于因为一些小的疏忽使得程序意外崩溃

二、套接字编程

2.1什么是socket?

网络基础=》socket

2.2 socket编程的作用?

基于socket开发一个C/S或者B/S结构的软件

Client------------网络--------------Server(要写两端程序:客户端、服务端)

Browser---------网络--------------Server(客户端(浏览器)一般不需要自己写,写了也没有人会用 o(╥﹏╥)o )

2.3 如何基于socket编程?

网络:https://www.cnblogs.com/linhaifeng/articles/5937962.html

网络 = 底层的物理连接介质+互联网通信协议

网络存在的意义:

就是增强通信的便捷、快速

2.4 OSI七层协议

互联网按照功能不同,一般分为OSI七层 或者tcp/ip五层 或tcp/ip四层:
在这里插入图片描述
每层运行常见物理设备:
在这里插入图片描述
OSI七层协议的数据传输的封包与解包示意图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值