lg04551

导航

 

一、异常

1、异常就是程序运行时发生的错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止)

错误分两种,语法错误,逻辑错误

一个异常分为三部分:

1、异常的追踪信息2、异常的类型3、异常的值

2、异常的种类

常用异常

attributerError 试图访问一个对象没有的树形比如foo.x,但foo没有属性x

IOError 输入、输出异常,基本上是无法打开文件

importError无法引入模块或包;基本上是路径问题名称错误

IndexError 下标索引超出序列边界,比如当X只有三个元素,却试图访问X[5]

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

NameError使用一个还未被赋予对象的变量

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

valueError传入一个调用者不期望的值,即使值的类型是正确的

 

语法:

单分支

try:

  print('start.....')

  x=1

  y

  l=[]

  l=[3]

  print('end....')

except NameError:

  print('变量名没有定义')

多分支

try    print('start.....')

    x=1
# y
l=[]
l[3]
d={'a':1}
d['b']
print('end....')
except NameError:
print('变量名没有定义')
except KeyError:
print('字典的key不存在')
except IndexError:
print('索引超出列表的范围')

多种异常采用同一段逻辑处理
try:
 print('start.....')

  x=1

  y

  l=[]

  l=[3]

  print('end....')

except(NameError,KeyError,IndexError):

  print('变量名或者字典的key或者列表的索引有问题')

万能异常

 

try:
print('start.....')
x=1
# y
l=[]
# l[3]
d={'a':1}
# d['b']
import os
os.aaa
print('end....')
except Exception:
print('万能异常---》')
获取异常的值
try:
print('start.....')
x=1
y
l=[]
l[3]
d={'a':1}
d['b']
import os
os.aaa
print('end....')
except Exception as e:
print('万能异常---》',e)


try....else....
else:不能单独使用,必须与except 连用,意思是:else的子代码地块会在被检测的代码没有出现过任何异常的情况下执行

 

 

try:
print('start.....')
x=1
y
l=[]
l[3]
d={'a':1}
d['b']
import os
os.aaa
print('end....')
except NameError as e:
print('NameError: ',e)

except KeyError as e:
print('KeyError: ',e)

except Exception as e:
print('万能异常---》',e)

else:
print('在被检测的代码块没有出现任何异常的情况下执行')
print('other.....')


try...finally....
try:
print('start.....')
x=1
# y
l=[]
l[3]
d={'a':1}
d['b']
import os
os.aaa
print('end....')
except NameError as e:
print('NameError: ',e)

except KeyError as e:
print('KeyError: ',e)

except Exception as e:
print('万能异常---》',e)

else:
print('在被检测的代码块没有出现任何异常的情况下执行')
finally:
print('无论有没有异常发生,都会执行')
print('other.....')

finally的子代码块中通常放回收系统资源的代码
try:
  f=open('a.txt',mode='w',encoding='utf-8')
  f.readline()
finally:
  f.close()


主动触发异常
raise TypeError('类型错误')
class People:
  def __init__(self,name):
    if not isinstance(name,str):
      raise TypeError('%s必须是str类型'%name)
     self.name=name

断言
print('part1........')
stus=['egon','alex','wxx','lxx']
stus=[]


if len(stus) <= 0:
raise TypeError
assert len(stus) > 0

print('part2.........')
print('part2.........')
print('part2.........')

自定义异常
class RegisterError(BaseException):
def __init__(self,msg,user):
self.msg=msg
self.user=user

def __str__(self):
return '<%s:%s>' %(self.user,self.msg)

raise RegisterError('注册失败','teacher')

二、网络编程
1、C/S、B/S 架构
  client---server
  browser---server
2、什么是网络?
  1、物理连接介质
  2、互联网协议
    互联网协议就是一堆标准
    比喻:互联网协议就是计算机界的英语

 


数据传输就是先包一层源和目的端口,再包一层源IP和目标IP,再包一层源MAC和目标MAC,通过网络接口层和对端PC通信,对端再一层一层解包最后得到相应的数据,先通过IP到局域再通过局域找到MAC再通过端口找到客户端对应的用户软件

2.3.1 物理层

物理层由来:上面提到,孤立的计算机之间要想一起玩,就必须接入internet,言外之意就是计算机之间必须完成组网

物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

2.3.2 数据链路层

数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思

数据链路层的功能:定义了电信号的分组方式

以太网协议:

早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet

ethernet规定

  • 一组电信号构成一个数据包,叫做‘帧’
  • 每一数据帧分成:报头head和数据data两部分
       head                        data                             

 

head包含:(固定18个字节)

  • 发送者/源地址,6个字节
  • 接收者/目标地址,6个字节
  • 数据类型,6个字节

data包含:(最短46字节,最长1500字节)

  • 数据包的具体内容

head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送


    




 

posted on 2018-04-18 14:58  lg04551  阅读(109)  评论(0编辑  收藏  举报