#异常处理
什么是异常?:在程序运行时,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 exceptTypeError as k:9 try:10 print(list(str(a))[1000])11 exceptIndexError: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 exceptException as i:4 print(i)
自定义异常:
1 class MyException(BaseException): #自定义的异常需要继承BaseException
2 def __init__(self, msg):3 self.msg =msg4
5 try:6 raise MyException('类型错误')7 except MyException as i: #注意自定义的异常不能用万能异常接收
8 print(i)
断言:
1 deffunc():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