day26
一、异常处理:
1、什么是异常:
异常是错误发生的信号,程序一旦出错,就会产生一个异常,如果该异常没有被程序处理,就会抛出来,程序也随即终止。
异常的三个组成部分:追踪信息(Traceback)、异常类型(..Error)和异常的值
2、异常处理部分错误分类示例:
a、语法错误:
#语法错误示范一 if #语法错误示范二 def test: pass #语法错误示范三 class Foo pass #语法错误示范四 print(haha #result:SyntaxError: invalid syntax # def func(): # print(1) # print(2) # result:IndentationError: unexpected indent 缩进错误也属于语法错误
b、逻辑错误:
#TypeError:int类型不可迭代 for i in 3: pass #ValueError num=input(">>: ") #输入hello int(num) #NameError aaa #IndexError l=['egon','aa'] l[3] #KeyError dic={'name':'egon'} dic['age'] #AttributeError class Foo:pass Foo.x #ZeroDivisionError:无法完成计算 res1=1/0 res2=1+'str'
3、常见错误汇总:
AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类);代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 ValueError 传入一个调用者不期望的值,即使值的类型是正确的
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
4、写程序是出现错误如何排查:
如何排查排查错误: 1.定位到错误发生的位置; 查看追踪信息 1.如果你的代码都是自己写的,没有调用任何内置模块或方法,那么错误发生位置一定在最后一行 2.如果你的代码调用其他模块的方法 1.是系统内置的模块(例如抛出位置object.py 不用去查看object类),一定是你自己代码在调用时出了错误; 2.别人写的模块是有可能出错的,所以你可以按照追踪信息点击去看看。 绝招:当追踪信息很多时,找信息中最好一行自己写的代码的位置。 2.查看异常类型 例如:IndexError 3.查看异常的值 例如: list index out of range
5、异常根据其发生时间的不同分为两类:
a、语法检测异常:
解释器在执行代码前先会对语法进行检测,检测通过后会开始执行语法,如果检查出语法错误,则会直接抛出异常,代码不会执行。例如:语法错误、缩进错误。
b、运行是产生的异常:
即语法检测通过后,在解释器执行到相关代码是发生的异常,多为逻辑异常。
# print("start") # a = int("abc") # print("over") #li = [] 语法1 #try except # try: # # 把可能发出错误的代码放到try中 # print("start") # # a = int("abc") # li[1] # print("over") # # except ValueError: # # 当try中真的发生了错误 就会执行 except中的代码 # # 在这里可以做一些补救措施 # print("发生了 ValueError异常") # # print("over") 语法2 try 后面加多个except # try: # print("start") # a = int("abc") # li[1] # print("over") # except ValueError: # # 当try中真的发生了错误 就会执行 except中的代码 # # 在这里可以做一些补救措施 # print("发生了 ValueError异常") # except IndexError: # print("发生了 IndexError 索引不正确") # print("over") 语法4 万能异常Exception类 # try: # # 把可能发出错误的代码放到try中 # print("start") # # a = int("abc") # # li[1] # 10 / 0 # dic = {} # dic["name"] # print("over") # # except Exception: # print("可能是任何类型的错误 反正是发生错误了") # print("over") 语法5 万能异常 Exception类 通过给异常取别名来输出异常的值 # try: # # 把可能发出错误的代码放到try中 # print("start") # # a = int("abc") # # li[1] # 10 / 0 # dic = {} # dic["name"] # print("over") # # # 可以通过给异常取别名 来获取异常的对象 对象中包含了错误信息 # except Exception as e: # print("可能是任何类型的错误 反正是发生错误了") # print(e) # print(type(e)) # print("over") 语法6 先捕获能够明确的异常类型 最后捕获万能异常类型 # try: # # 把可能发出错误的代码放到try中 # print("start") # # a = int("abc") # # li[1] # # 10 / 0 # dic = {} # dic["name"] # print("over") # except ValueError: # print("值不对.....") # except ZeroDivisionError: # print("除数不能为0") # # 可以通过给异常取别名 来获取异常的对象 对象中包含了错误信息 # except Exception as e: # print("可能是任何类型的错误 反正是发生错误了") # print(e) # print(type(e)) # # print("over") 语法7 try except else #当没有发生异常会执行else # try: # # 把可能发出错误的代码放到try中 # print("start") # # a = int("abc") # # li[1] # # 10 / 0 # dic = {} # # dic["name"] # print("over") # except ValueError: # print("值不对.....") # except ZeroDivisionError: # print("除数不能为0") # # 可以通过给异常取别名 来获取异常的对象 对象中包含了错误信息 # except Exception as e: # print("可能是任何类型的错误 反正是发生错误了") # print(e) # print(type(e)) # else: #当没有发生异常会执行else 只能except的后面 # print("执行了else") # print("over") 语法8 try except finally #无论是否发生异常 最后都会执行finally中的代码 # try: # # 把可能发出错误的代码放到try中 # print("start") # # a = int("abc") # # li[1] # # 10 / 0 # dic = {} # # dic["name"] # print("over") # except ValueError: # print("值不对.....") # finally: #无论是否发生异常 最后都会执行finally中的代码 # print("finally") # print("over") import io # finally的使用场景 可以用finally来执行一些清理操作 类似__del__ try: print("start") f = open("1.今日内容","rt",encoding="utf-8") f.read() print("end") except FileNotFoundError: print("文件路径错误...") except io.UnsupportedOperation: print("文件不能被写入....") finally: f.close() print(f.closed) """ 完整的书写顺序 try except else finally """ # 你需要掌握的语法 """ 1. try: except: 2. try: except: finally:
正确使用异常处理总结:
1、如果能够明确知道异常发生的原因就不要让程序产生异常;
2、不知道异常发生的原因,但是知道异常的类型,就用except明确捕获该类型的异常;
3、不知道异常的发生原因也不知道异常的发生类型时,可以使用万能异常,建议一定要打印出异常消息。
6、主动抛出异常:
使用场景:当写的一些功能是提供给别人用时,然而使用者不按照要求的方式来使用就会导致程序出错,而且我们无法帮助用户处理这个错误,这时候就可以主动抛出异常。采用raise关键字,后面跟Exception类型的子类。
# 自定义异常类型 class LoginException(Exception): pass def login(): name = input("username:").strip() pwd = input("password:").strip() if name == "blex" and pwd == "123": print("登录成功!") else: raise LoginException("用户名或密码不正确....") login()
7、断言 assert:
1、语法:assert 条件 条件为bool类型,当条件为真,执行下面代码,否则抛出AssertionError;
2、作用:用于声明某个条件是真的时,执行下文中的代码;
3、优缺点:优:可以简化代码;
缺:异常类型是固定的,而且不能指定异常信息。
# 有一堆姓名 需要被处理 names = ["张三","李四","王麻子"] # names = [] # 一定要保证列表中有数据需要被处理 # if not names: # raise TypeError("没有数据需要处理....") # print("正在处理这堆数据....") names = [] # 使用断言来简化代码 断言后面跟一个bool类型表达式 如果结果为True则继续往下执行 # 否则直接抛出异常 AssertionError # 其局限性是 异常类型是固定的 而且不能指定异常信息 assert 1 print("正在处理这堆数据....")
二、网络编程:
1、B/S 和 C/S架构:
a、B/S架构:browser<-----基于网络通信------>server
b、C/S架构:client <-----基于网络通信------>server
server端必须满足的条件:
1、稳定运行(网络、硬件、操作系统和服务端应用软件)对外一直提供服务;
2、服务端必须绑定一个固定的地址。
2、什么是互联网:
计算机中的互联网,是由多台计算机通过物理介质(网线或其他媒介)相互连接组成的。
两大要素:
1、底层的物理连接介质(网线,无线电,光纤等),是为通信铺好道路;
2、一套统一的通信标准----->互联网通信协议。
2.1 通信协议
a、什么是协议?
协议就是标准,所有计算机都遵循相同的标准才能正常的交流通讯。
b、为什么要指定协议?
在计算机中,连接介质通常是网线,网线的本质就是一条电线,可以传播电流,而电流按照强弱,被计算机识别为0和1。
c、如何使用协议?
作为程序开发者,物理介质不是我们需要关心的,重点学习通讯协议。
3、网络通讯协议
协议是由发送方和接受方共同制定的,现在大家都遵循同一套协议(OSI)
OSI 七层模型
1、什么是OSI
Open System Interconnection Reference Model,开放式系统互联通讯参考模型,缩写为OSI,是由国际标准组织推出的,其实就是一大堆协议,OSI把整个通讯过程划分为七层,简称OSI七层模型。