4.16
昨日回顾
- 反射:动态的条件下,在运行的时候可以通过某种方法获取到数据内部的信息
- 实现反射:hasattr,getattr(obj,x,None)指定none,不存在返回none,不报错,setattr,delattr
- 内置方法:定义在类内,某些情况下自动触发
- 定义元类的意义:控制类的产生,初始化,调用方式
今日内容
-
异常处理
-
网络编程:套接字编程
C / S,B /S 架构
OSI 七层协议(重要)
正课
异常处理
异常是程序发生错误的信号,程序一旦发生错误就会抛出异常,随即中止程序
异常分为几个部分
- Trace back:异常的追踪信息
- Error type:异常的类型
- 异常的信息
为何处理异常:为了增强程序的健壮性,出错了不应该中止程序,而是捕捉异常并处理,将出错信息纪录到日志内
如何处理异常
语法上的错误:SyntaxError
- 写错了,必须在运行之前改正
逻辑上的错误:NameError,IndexError,ZerodivisionError,KeyError
针对逻辑上的异常,又分成两种处理方式
- 错误发生的条件是可以预知的:在逻辑上判断,直接解决
- 错误发生的条件无法预知的
try + except
try:
子代码块 # 有可能会抛出异常的代码
# 如果子代码块中出现异常,则异常改行及以下的代码块不会运行
except 异常类型1 as e:
print(e)
except 异常类型2:
pass
except 异常类型3 as e:
pass
else:
# 如果被监测的子代码块没有异常,则会运行else里的代码
pass
finally:
代码块 # 无论被检测的子代码块有无异常,最后都会执行finally的代码块
只用来做异常处理。会降低代码可读性,用的越少越好
-
try可以单独跟finally,except连用,不能和else单独连用
-
可以在异常后面 as e:得到异常的信息,在except里面打印
-
可以在一个except里加多个异常类型,异常类型放在元组里
except(IndexError,NameError) as e:
-
万能异常 Exception 可以匹配所有的异常,上面指定异常种类可以对单独一个异常特殊处理,最下面适用Exception对不需要特殊处理的异常统一处理
-
finally不处理异常,只是在try之后运行,try代码块结束后整个程序还是会结束
-
涉及到占用系统资源的操作,如果在代码中出错,则程序直接中止,没办法运行到回收系统资源的代码,所以可以把回收系统资源的代码放在finally里面
网络编程
CS/BS架构
CS架构:客户端软件
BS架构:浏览器
网络通信:网络存在的意义就是数据传输
网络 = 物理连接介质 + 互联网通信协议
互联网通信协议
OSI七层协议
应表会传网数物,也被分为五层
应用,传输,网络,数据链路,物理
协议:规定数据的组织格式
- 格式:头部 + 数据
- 网络传输类似于发包裹,加头部类似于封装快递盒。收到数据也需要进行解包
在每一层,有不同的名字用于区分
- 数据段:传输层
- 数据包:网络层
- 数据帧:链路层
- 数据位:物理层
不同层的用途
每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件
物理层
- 负责发送电信号 010101
- 单纯的电信号毫无意义,必须对其进行分组
- 一组物理层数据称之为 位
数据链路层
ethernet以太网协议
-
干对物理层数据进行分组的活,规定一组数据称之为一个数据帧
-
用一个统一的标准对数据进行分组:以太网ethernet
以太网规定了几个概念:
-
一组电信号构成一个数据包,称为 帧
-
以太网协议规定但凡接入互联网的主机必须有一块网卡,每块网卡出厂时都烧制一个全世界唯一的id,称为mac地址
-
一个帧中包含两部分,头和数据
头包含
- 发送者 / 源地址 6个字节
- 接收者 / 目标地址 6个字节
- 数据类型 6个字节
数据
- 数据的内容
-
广播:计算机通信基本靠吼,即以太网协议的工作方式。在同一个局域网内,吼了之后所有人都能听得见,于是开始识别你的数据中的接收者,发现接收者不是自己就不管了,接收者识别到是自己,才会做出响应,获取数据
当然这种广播的方式不能直接用在全世界计算机通信
全世界的网络是由许多个子网组成的,在子网中广播只能在当前广播域下起作用,而服务端跟客户端当然是分散于不同的子网的,所以不能通过广播通信
从当前的子网出发找别的子网下的接收者,需要另一种地址,找到对方的子网,再找到对方:IP地址
数据链路层的协议是以太网,解决不了找别的子网的工作,于是我们去到上一层,网络层
网络层
引入一套新的地址来区分不同的子网:网络地址,规定网络地址的协议叫IP协议
IP协议
- 与以太网协议类似,也要有一个报头,只是里面放的不是mac地址,放的是IP地址
- IP地址被分为网络部份和主机部分,单独拿哪一部分都不能找到一IP所在的子网
子网掩码
子网络特征的一个属性,通过运算可以判断IP是局域网还是广域网
总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络
到这里,从本机传输出去的网路数据已经被包了两层,第一层是IP,第二层是以太网头。
ARP协议
在通信时,获取通信对象的mac地址的方法:通过广播的方式发送数据包,获取目标主机的mac地址