python 17 异常处理、网络编程
day 17 异常处理、网络编程
1.异常处理
-
什么是异常
异常是程序发生错误的信号,一旦程序出错python解释器就会产生一个异常,如果该异常没有被处理,该异常就会被抛出来,程序的运行也随即终止
具体来说错误分为两大类
-
语法错误SyntaxError:在程序运行前必须改正,不允许出现
-
逻辑错误:程序运行中出现的问题
- 尽量避免
- 针对无法预防的错误,解决方案使用try——except
# TypeError:数字类型无法与字符串类型相加 1+’2’ # ValueError:当字符串包含有非数字的值时,无法转成int类型 num=input(">>: ") #输入hello int(num) # NameError:引用了一个不存在的名字x x # IndexError:索引超出列表的限制 l=['egon','aa'] l[3] # KeyError:引用了一个不存在的key dic={'name':'egon'} dic['age'] # AttributeError:引用的属性不存在 class Foo: pass Foo.x # ZeroDivisionError:除数不能为0 1/0
-
-
为何要处理异常
增强程序的健壮性、鲁棒性
-
如何处理异常
print("start...") try: 代码1 代码2 代码3 except 异常类型1 as e: 处理异常1 except 异常类型2 as e: 处理异常2 except (异常类型3,异常类型4) as e: 处理异常 except Exception as e: 处理异常 else: print('被检测代码块没有异常发生时运行') finally: print("无论有没有异常都会运行") print("end...")
主动抛出异常
raise TypeError("名字必须是str类型")
# 自定义错误类型
class StrError(BaseException):
def __init__(self, v):
self.v = v
def __str__(self):
return f"<{self.v}>"
raise StrError("名字必须是str类型")
# 断言:用来调试程序,调试结束可以删除
l = [11, 22]
# if len(l) != 3:
# raise TypeError("错误")
assert len(l) ==3
print(111)
print(222)
2.网络编程
学习网络编程的目的是为了开发一个CS架构或者BS架构的软件
Client————————————网络————————————Server
Browser———————————网络————————————Server
1、什么是网络?
网络=物理连接设备+互联网通信协议(就是计算机界的英语)
2、为何要有网络?
网络——>信息高速公路
为了方便数据传输
3、osi七层协议
tcp/ip五层模型
物理层
转成二进制数据进行传输
数据链路层——数据帧
内有mac地址(只在局域网中用)——标识了哪台电脑
定义了电信号的分组方式
以太网协议:
早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet
ethernet规定
一组电信号构成一个数据包,叫做'帧',每一数据帧分成:报头head和数据data两部分
head包含:(固定18个字节):发送者的mac地址,6个字节、接收者的mac地址,6个字节
data包含:(最短46字节,最长1500字节)
数据包的具体内容:
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
网络层——数据包
内有ip——>判断是否在一个局域网、获取目标mac地址
ip协议
ipv4:0.0.0.0——255.255.255.255
传输层——数据段
内有端口——>标识了那个应用程序
tcp/udp协议
应用层
处理数据
总结:
4、socket
socket把传输层及其以下都封装好
5、arp协议——> 数据到底是如何发出去的
arp:负责把ip解析成mac地址
储备知识1:通信分为两大类:
- 目标主机在局域网内
- 目标主机不在局域网内
储备知识2:IP地址与子网掩码
源主机
11000000.10101000.00001011.00011100<——192.168.11.28
11111111.11111111.11111111.00000000<——255.255.255.0
子网地址====>11000000.10101000.00001011.00000000——>192.168.11.0
目标主机
11000000.10101000.00001011.00011101<——192.168.11.29
11111111.11111111.11111111.00000000<——255.255.255.0
子网地址====>11000000.10101000.00001011.00000000——>192.168.11.0
IP的作用:
- arp协议会依据ip地址解析成mac地址
- ip+子网掩码按位与运算会得到网络地址,以此来判断源于目标是否在一个局域网内
通信的前提是:先拿到目标的ip与端口
arp协议的工作步骤
-
依据自己的ip与子网掩码计算出自己的网络地址
-
依据对方的ip与子网掩码计算出对方的网络地址
-
判断1和2的网络地址是否一样
-
如果一样,证明源于目标在同一个局域网内,只需要走交换机即可
发arp协议的包:拿到目标主机的mac地址
自己的mac、FF-FF-FF-FF-FF-FF、自己的ip地址、对方的ip地址、数据
发送真实数据包
自己的mac、目标主机的mac地址、自己的ip地址、对方的ip地址、源端口、目标端口、数据
-
如果不一样,证明源于目标不在同一个局域网内,需要走交换机,再发给路由器,路由器再转发给运营商的网络
发arp协议的包:拿到网关的mac地址
自己的mac、FF-FF-FF-FF-FF-FF、自己的ip地址、网关的ip地址、数据
发送真实数据包
自己的mac、目标主机的mac地址、自己的ip地址、对方的ip地址、源端口、目标端口、数据
局域网中ip地址类似于电话号码,mac地址类似于收货地址,通过电话号码得到对方的收货地址
-
交换机只有两种情况广播:
- 目标mac为FF-FF-FF-FF-FF-FF
- 目标mac地址不在mac地址表中
6、tcp协议
基于tcp协议通信,在传数据之前必须建立双向通路
7、dns
8、dhcp
通过解析域名得到ip地址
9、网络通信流程
10、ip的子网划分
C类ip默认24为子网掩码(255.255.255.0)可以将24为改为25位(255.255.255.128)可将C类的网络地址变为2段192.168.11.{0-127}——192.168.11.0、192.168.11.{128-255}——192.168.11.128
借主机位给网络位用,把原来一个网段变成多个网段去用
效果:
- 减少了ip的浪费
- 缩小了广播域