Python——网络编程(一)异常处理与网络协议

#异常处理

什么是异常?:在程序运行时,python解释器检测到错误发出的信号

常用异常:

AttributeError: 试图访问一个对象不存在的属性

IOError: 输入/输出异常;基本是无法打开文件

ImportError: 无法导入模块或包,基本是路径问题或者名称错误

IdentationError: 语法错误的子类,代码没正确对齐

IndexError: 下标索引超出边界

KeyError: 试图访问字典中不存在的键

KeyboardInterrupt: 终端中使用 Ctrl + C 终止程序时触发

NameError: 使用还没被赋予对象的变量(调用未定义的变量)

SyntaxError: python代码非法,也就是语法错误

TypeError: 传入对象类型与要求的不符合

UnboundLocalError: 试图访问一个还未被设置的局部变量,基本上是由于另一个同名的全局变量,导致你以为在访问它

ValueError: 传入一个调用者不期望的值,如int('abc')

什么是异常处理?:

编写特定代码,专门用来捕捉这个异常;捕捉成功后进行其他逻辑;目的是不使程序崩溃

为什么要进行异常处理?:

python解释去执行程序时,只要检测到一个错误,触发异常,在异常未被处理的情况下程序就会被终止。

为了程序能接着运行别的逻辑而使用。

如何进行异常处理?:

首先要知道,异常是由错误引发的,语法上的错误跟异常处理无关,必须在程序运行前就修正

之前常常用if来进行异常处理,现在换一种新的方式:

python为每一种异常都归类并制定类型,然后提供一种特定语法结构来进行异常处理

基本语法:

1 try:
2     被检测的代码块
3 except:
4     try中一旦检测到异常,就执行这个位置的逻辑

小例子:

1 try:
2     value = input('>>')
3     int(value)
4 except ValueError as i:             #这里的i为异常的值
5     print(i)
6 print('程序继续运行')

 多分支:对多个异常进行处理

注意:一旦接收到异常,则跳转到except那进行接下来的逻辑,不会继续运行try中的逻辑

 1 try:
 2     value = input('>>')
 3     a = int(value)
 4     b = list(a)[1000]
 5     print('---------')              #不会执行这步
 6 except ValueError as i:             #多分支
 7     print(i)
 8 except TypeError as k:
 9     try:
10         print(list(str(a))[1000])
11     except IndexError:
12         print('超出索引范围')

 万能异常Exception:能接收所有异常

1 try:
2     value = input('>>')
3     a = int(value)
4 except Exception as i:             #万能异常
5     print(i)

当需要对不同异常进行不同处理时,可用多分支(多分支最后也可加上一个万能异常)

当只需要对所有异常都进行一种处理时,可用万能异常

 异常的其他结构:

 1 try:
 2     value = input('>>')
 3     a = int(value)
 4 except Exception as i:             #万能异常
 5     print(i)
 6 else:
 7     print('try内代码块没有异常时执行')
 8 finally:
 9     print('无论try内代码块有无异常都执行,通常是进行清理工作(比如关闭文件)')
10 print('end')

 主动触发异常:raise

1 try:
2     raise TypeError('类型错误')
3 except Exception as i:
4     print(i)

自定义异常:

1 class MyException(BaseException):     #自定义的异常需要继承BaseException
2     def __init__(self, msg):
3         self.msg = msg
4 
5 try:
6     raise MyException('类型错误')
7 except MyException as i:              #注意自定义的异常不能用万能异常接收
8     print(i)

断言:

1 def func():
2     return 1
3 value = func()
4 assert value == 2
5 #其实就相当于下面,只是省了一行代码
6 if value != 2:
7     raise AssertionError

总结:

使用try ... except的好处

1、把错误处理和真正的工作分离开

2、代码更易组织、清晰

3、更安全,程序不容易崩溃

尽量少用:

 能修正的逻辑错误尽量修正,只有当错误无法预知时才用try...except

客户端/服务器架构:C/S架构(client/service)

包括:

硬件C/S架构(如打印机)

软件C/S架构(如web)

 

CS信息传输流程

1、客户端软件产生数据,存放于客户端软件的内存中,然后调用接口将自己内存中的数据发送/拷贝给操作系统内存

2、客户端操作系统收到数据后,按照客户端软件指定的规则(即协议)、调用网卡发送数据

3、网络传输数据

4、服务端软件调用系统接口,想要将数据从操作系统内存拷贝到自己的内存中

5、服务端操作系统收到4的指令后,使用与客户端相同的规则(即协议)从网卡接收到数据,然后拷贝给服务端软件

网络模型

 

计算机与计算机之间要有统一的连接标准才能够进行通信,这个标准称之为互联网协议,而网络就是物理链接介质+互联网协议。 

 

按照功能不同,人们将互联网协议分为 osi七层或tcp/ip五层或tcp/ip四层

 

 

 

 

 详情见https://www.cnblogs.com/linhaifeng/articles/5937962.html#_label2

posted @ 2019-10-27 17:21  Matrixssy  阅读(394)  评论(0编辑  收藏  举报