Pyhton学习——Day29
#异常与错误
# 什么是异常?
# 异常就是程序运行时发生错误的信号,在程序出现错误时,则会产生异常,若没有程序处理,则会抛出异常
# 导致程序在异常语句处崩溃终止
# Traceback 追踪异常信号;****Error 异常类;********异常值三部分构成
# 错误分为语法错误(低级错误)、逻辑错误(编程思维错误)
# 异常就是错误引发的结果,处理的目的就是让程序在异常后跳转到其他的逻辑执行,不让程序崩溃
#————————————————————————————————————————————————————#
# 转载(部分修改):http://www.cnblogs.com/linhaifeng/articles/6232220.html
# 异常的种类
# AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
# IOError 输入/输出异常;基本上是无法打开文件
# ImportError 无法引入模块或包;基本上是路径问题或名称错误
# IndentationError 语法错误(的子类) ;代码没有正确对齐
# IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
# KeyError 试图访问字典里不存在的键
# KeyboardInterrupt Ctrl+C被按下(多用于解释器中)
# NameError 使用一个还未被赋予对象的变量
# SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
# TypeError 传入对象类型与要求的不符合
# UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
# 导致你以为正在访问它
# ValueError 传入一个调用者不期望的值,即使值的类型是正确的
#————————————————————————————————————————————————————#
# 1.if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误需要写if来进行处理
# 2.在程序中写与本身程序无关的代码,可读性会及其的差
# 3.if本身就是可以解决异常的
# def test():
# print('test running')
# choice_dic = {
# '1':test
# }
# while True:
# choice = input('>>').strip()
# # if not choice or choice not in choice_dic:
# # continue #if异常处理机制
# choice_dic[choice]()
#————————————————————————————————————————————————————#
# python为每一种异常定制了一个类型,提供的特定的语法结构用来进行异常处理
# part1:try except捕捉异常
#基本语法为
# try:
# 被检测的代码块
# except 异常类型:
# try中一旦检测到异常,就执行这个位置的逻辑
# 异常处理有多种方式,处理异常可以用try..except也可以用if
# try..except可以使用多分支来捕捉不同的异常
# 万能异常:Exception
# try:
# dic = {
#
# }
# dic['key']
# except Exception as e:
# print('我是万能异常捕捉器')
# 什么时候使用万能异常?
# 1.需求方需要抛出所有的异常,且不做任何处理,或者使用同一段代码去处理,只要用Exception
# 2.对于不同的多分支,需要定制不同的处理逻辑,那就需要用到多分支了
#————————————————————————————————————————————————————#
# 异常的其他结构:
# else:没有异常时执行语句,有异常就跳过;finally:用于清理工作,都执行,需要放在try代码块执行最后
# s1 = 'hello'
# s1 = 1
# try:
# int(s1)
# except ImportWarning as e:
# print('---->>',e)
# # except ValueError as e:
# # print('---->>',e)
# except Exception as e:
# print('----->>',e)
# else:
# print('else可以判断try代码块中逻辑是否有异常')
# finally:
# print('用于清理工作,回收垃圾专用,无论有没有异常都可以做')
# print('正常执行其他的逻辑')
# raise 主动抛出异常
# 自定义异常
# class DefException(BaseException):
# def __init__(self,msg):
# self.msg = msg
# # raise DefException('自定义异常')
# print(DefException('自定义异常'))
# raise TypeError('类型错误')
# 自定义异常要继承异常的一个基类
#————————————————————————————————————————————————————#
# 断言:assert
# assert 1 == 2
# 断言一般同于判断两段代码的执行结果是否相等
# 等同于if判断,相比if更简洁
#————————————————————————————————————————————————————#
# 总结:if本身就可以用来处理异常,只不过if的方式代码量大且不易读,try..except的多分支就比如if的多条件判断,
# if的else就像try的exception,只不过if是针对一种异常的多分支,针对不同段代码的同种错误类型,需要重复写多分支if
# 而try是针对不同类型异常的多分支,可以把不同段的代码放到一起,检测他们的同种类型错误
#————————————————————————————————————————————————————#
#————————————————————————————————————————————————————#
# Socket编程:
# 一:客户端/服务器架构(C/S架构)
# 1.硬件C/S架构(打印机)
# 2.软件C/S(Web服务)
# 互联网中到处都是C/S架构,socket就是完成C/S架构的开发
#————————————————————————————————————————————————————#
# osi七层
# 一个完整的计算机系统是由硬件、操作系统、应用软件三种组成,具备这三个条件,一台计算机系统就可以自己和自己玩了
# 如果要和别人玩,就需要上网了,互联网的核心就是由一堆协议组成,协议就是标准,互联网协议就是计算机世界的英语,
# 所有的计算机都具备互联网协议,就可以按照统一的标准去收发信息从而完成通信
# 分工的不同会把互联网协议划分层级
# 1.学会socket编程,完成C/S架构的软件
# 2.C/S架构的软件,是基于网络通信进行的
# 3.网络的核心就是一堆协议,遵循这些标准作出的网络通信的软件
# 4.从标准开始
# 数据链路层:Mac标识物理机的物理位置,网络层:IP在标识房间位置,传输层(端口号):Tcp/Ip;Udp协议[192.168.1.1:80]
# 应用层
# Socket抽象层在传输层和应用层之间,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,在设计模式中,
# Socket其实是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让
# Socket去组织数据,以符合指定的协议
# 即无需深入理解TCP/IP协议,socket已经封装好了,只需要遵循socket的规定去编程
# pid是用来标识同一台机器上不同进程或者线程的标识【和网络编程无关系】
#————————————————————————————————————————————————————#
# 套接字的发展史
# 同一个进程只能再同一个时间内运行,不能同时运行
#————————————————————————————————————————————————————#
# backlog:半连接池,用于暂时存放客户端发来的响应信息
# accept在建立tcp的三次握手
# tcp协议可靠性在于服务端不会丢失,因为一定要回复给客户端信息,如果服务端未接受,则会再发送
# 关闭连接(三次握手)
# ps:什么是事件驱动?
# 所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数).当然事件不仅限于用户的操作.
# 事件驱动的核心自然是事件。从事件角度说,事件驱动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。
# 事件收集器专门负责收集所有事件,包括来自用户的(如鼠标、键盘事件等)、
# 来自硬件的(如时钟事件等)和来自软件的(如操作系统、应用程序本身等)。
# 事件发送器负责将收集器收集到的事件分发到目标对象中。事件处理器做具体的事件响应工作,它往往要到实现阶段才完全确定,
# 因而需要运用虚函数机制(函数名往往取为类似于HandleMsg的一个名字)。对于框架的使用者来说,
# 他们唯一能够看到的是事件处理器。这也是他们所关心的内容。
#————————————————————————————————————————————————————#
# 四次挥手:谁先发完包,谁先主动申请关闭请求
# FIN_WAIT1--主动断开
# FIN_WAIT2--被动断开
# 三次握手建立的只是没有数据传输的链接,而四次挥手包含数据
# 大并发情况下,服务端为了节省自身资源,会自动断开链接,服务端先断开链接,所以服务端会先有TIME_WAIT
Win a contest, win a challenge
posted on 2018-03-08 16:27 pandaboy1123 阅读(137) 评论(0) 编辑 收藏 举报