zoukankan      html  css  js  c++  java
  • day34-异常处理,网络编程

    一、异常处理

    1、什么是异常
    异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随即终止

    print('start....')
    [1,2,3][1000]
    print('stop...')
    1.1 异常处理的三个特征
    异常的追踪信息
    异常的类型
    异常的内容

    2、为何处理异常
    为了增强程序的健壮性,即便是程序运行过程中出错了,也不要终止程序
    而是捕捉异常并处理:将出错信息记录到日志内

    3、如何处理异常?
    3.1 语法上的错误SyntaxError,
    处理方式一:必须在程序运行前就改正

    if 1>3
        print("run...")
    
    3.2 逻辑上的错误
    print(x)
    
    l=['a','b']
    l[2]
    
    
    1/0
    
    int('abc')
    
    dic={'name':'egon'}
    dic['age']
    
    class Foo:
        pass
    
    Foo.x

    3.2 针对逻辑上的异常又分成两种处理方式
    3.2.1 错误发生的条件是可以预知的,使用if判断来解决

    age=input('>>: ').strip() # 输入的只要不是数字就会出错
    if age.isdigit():
        age=int(age)
        if age > 18:
            print('猜大了')
        elif age < 18:
            print('猜大了')
        else:
            print('猜对了')
    else:
        print('必须输入数字')

    3.2.2 错误发生的条件是无法预知的

    print('start...')
    try:
        # 有可能会抛出异常的代码
        子代码1
        子代码2
        子代码3
    except 异常类型1 as e:
        pass
    except 异常类型2 as e:
        pass
    ...
    else:
        如果被检测的子代码块没有异常发生,则会执行else的子代码
    finally:
        无论被检测的子代码块有无异常发生,都会执行finally的子代码
    
    print('end...')
    # 用法一:
    print('start...')
    
    try:
        print('1111111111')
        l=['aaa','bbbb']
        l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
        print('2222222222')
        xxx
        print('33333333')
        dic={'a':1}
        dic['a']
    except IndexError as e:
        print('异常的信息: ',e)
    
    print('end....')
    
    
    # 用法二:
    print('start...')
    
    try:
        print('1111111111')
        l=['aaa','bbbb']
        # l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
        print('2222222222')
        xxx
        print('33333333')
        dic={'a':1}
        dic['a']
    except IndexError as e:
        print('异常的信息: ',e)
    except NameError as e:
        print('异常的信息: ',e)
    
    print('end....')
    
    
    # 用法三:
    print('start...')
    
    try:
        print('1111111111')
        l = ['aaa', 'bbbb']
        l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
        print('2222222222')
        xxx
        print('33333333')
        dic = {'a': 1}
        dic['aaa']
    # except (IndexError, NameError) as e:
    #     print('异常的信息: ', e)
    # except KeyError as e:
    #     print('字典的key不存在: ', e)
    except Exception as e:  # 万能异常
        print('所有异常都可以匹配的到')
    print('end....')
    
    
    # 用法四:else不能单独与try配合使用,必须要搭配except
    print('start...')
    
    try:
        print('1111111111')
        print('2222222222')
        print('33333333')
    except Exception as e:  # 万能异常
        print('所有异常都可以匹配的到')
    else:
        print('====>')
    
    print('end....')
    
    用法五:finally可以单独与try配合使用
    
    print('start...')
    
    try:
        print('1111111111')
        l = ['aaa', 'bbbb']
        l[3] # 抛出异常IndexError,该行代码同级别的后续代码不会运行
        print('2222222222')
        xxx
        print('33333333')
        dic = {'a': 1}
        dic['aaa']
    finally: # 不处理异常,无论是否发生异常都会执行finally的子代码
        print('====》》》》》应该把被检测代码中回收系统资源的代码放到这里')
    
    print('end....')

    二、网络编程

    1、CS架构与BS架构
    Client<===========>Server

    客户端软件send 服务端软件recv
    操作系统 操作系统
    计算机硬件<====物理介质=====>计算机硬件


    Browser<===========>Server

    2、网络通信
    网络存在的意义就是跨地域数据传输=》称之为通信
    网络=物理链接介质+互联网通信协议

    3、OSI七层协议(物链网传会表应)
    五层协议
    应用层
    传输层
    网络层
    数据链路层
    物理层

    协议:规定数据的组织格式
    格式:头部+数据部分

    封包裹的过程:数据外加头
    拆包裹的过程:拆掉头获取数据

    4、五层协议
    计算机1: 计算机2:

    应用层 应用层
    传输层 传输层
    网络层 网络层
    数据链路层 数据链路层
    物理层 <===========交互机===========> 物理层
    0101010101010

    (源mac地址,目标mac地址)(源ip地址,目标ip地址)数据

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

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

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

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

    以太网协议:

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

    ethernet规定

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

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

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

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

    • 数据包的具体内容

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

    mac地址:

    head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址

    mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

    广播:

    有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)

    ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼

    网络层由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由

    一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,

    这就不仅仅是效率低的问题了,这会是一种灾难

    网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

    IP协议:

    • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
    • 范围0.0.0.0-255.255.255.255
    • 一个ip地址通常写成四段十进制数,例:172.16.10.1

    ip地址分成两部分

    • 网络部分:标识子网
    • 主机部分:标识主机

    注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网

    子网掩码

    所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

    知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

    总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

    ip数据包

    ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分

    head:长度为20到60字节

    data:最长为65,515字节。

    而以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

    以太网头                ip 头                                     ip数据                                

     ARP协议

    arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到

    通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议

    arp协议功能:广播的方式发送数据包,获取目标主机的mac地址

    协议工作方式:每台主机ip都是已知的

  • 相关阅读:
    周末之个人杂想(十三)
    PowerTip of the DaySorting Multiple Properties
    PowerTip of the DayCreate Remoting Solutions
    PowerTip of the DayAdd Help to Your Functions
    PowerTip of the DayAcessing Function Parameters by Type
    PowerTip of the DayReplace Text in Files
    PowerTip of the DayAdding Extra Information
    PowerTip of the DayPrinting Results
    Win7下IIS 7.5配置SSAS(2008)远程访问
    PowerTip of the DayOpening Current Folder in Explorer
  • 原文地址:https://www.cnblogs.com/xiao-zang/p/12714688.html
Copyright © 2011-2022 走看看