zoukankan      html  css  js  c++  java
  • 18 Apr 18 异常处理 网络编程

    18 Apr 18
    一、异常处理
    1、什么是异常
        异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制,那么该错误就会产生一个异常抛出来,程序的运行也随之终止。
     
    2、一个异常分为三部分:
        1、异常的追踪信息
        2、异常的类型
        3、异常的值
     
    3、异常的分类:
        1、语法异常:
            这类异常应该在程序执行前就改正
            print('start....')
            x=1
            x+=1
            if
            print('stop....')
     
        2、逻辑上的异常
     
    4、常见逻辑上的异常
    IndexError
    l=['a','b']
    l[100]
     
    KeyError
    d={'a':1}
    d['b']
     
    AttributeError:
    class Foo:
        pass
    Foo.x
    import os
    os.aaa
     
    ZeroDivisionError
    1 / 0
     
    FileNotFoundError
    f=open('a.txt','r',encoding='utf-8')
     
    ValueError: I/O operation on closed file.
    f=open('a.txt','r',encoding='utf-8')
    f.close()
    f.readline()
     
    ValueError: invalid literal for int() with base 10: 'aaaaa'
    int('aaaaa')
     
    TypeError
    for i in 333:
        pass
     
    NameError
    x
    func()
     
    def func():
        import os
        os.xxxx
    func()
     
    5、语法:
    try不影响正常程序的运行,遇到异常跳到except判断
    单分支
    try:
        print('start.....')
        x=1
        y
        l=[]
        l[3]
        d={'a':1}
        d['b']
        print('end....')
    except NameError:
        print('变量名没有定义')
    print('other.....')
     
    多分支
    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('索引超出列表的范围')
    print('other.....')
     
    多种异常采用同一段逻辑处理
    try:
        print('start.....')
        x=1
        # y
        l=[]
        # l[3]
        d={'a':1}
        d['b']
        print('end....')
    except (NameError,KeyError,IndexError):
        print('变量名或者字典的key或者列表的索引有问题')
    print('other.....')
     
    万能异常
    try:
        print('start.....')
        x=1
        # y
        l=[]
        # l[3]
        d={'a':1}
        # d['b']
        import os
        os.aaa
        print('end....')
    except Exception:
        print('万能异常---》')
    print('other.....')
     
    获取异常的值
    try:
        print('start.....')
        x=1
        y
        l=[]
        l[3]
        d={'a':1}
        d['b']
        import os
        os.aaa
        print('end....')
    except Exception as e: # except NameError as e:
        print('万能异常---》',e)
    print('other.....')
     
    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)
    print('other.....')
     
    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()
    print('other....')
     
    try+except
    try+except+else
    try+finally
    try+except+else+finally
     
    6、主动触发异常
    raise TypeError('类型错误')
     
    class People:
        def __init__(self,name):
            if not isinstance(name,str):
                raise TypeError('%s 必须是str类型' %name)
            self.name=name
    p=People(123)
     
    7、断言
    print('part1........')
    # stus=['egon','alex','wxx','lxx']
    stus=[]
     
    # if len(stus) <= 0:
    #     raise TypeError
     
    assert len(stus) > 0
     
    print('part2.........')
    print('part2.........')
    print('part2.........')
    print('part2.........')
    print('part2.........')
    print('part2.........')
     
    8、自定义异常
    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')
     
    在可以知道异常是什么时候用if,在知道有异常但不确定异常是什么的情况下可用try等
    尽量少使用try等,避免使结构看上去过于复杂
    age=input('>>: ').strip() #age='aaa'
     
    if age.isdigit():
        age=int(age)
     
        if age > 10:
            print('too big')
        elif age < 10:
            print('too small')
        else:
            print('you got it')
     
    二、网络编程
    1、C/S、B/S架构
       client<------>server
       browser<------>server
       学习socket编程就是要编写一个客户端软件和服务端软件,然后实现服务端与客户端基于网络通信。
     
    2、什么是网络?
        1、物理连接介质
        2、互联网协议
           互联网协议就是一堆标准
           比喻:互联网协议就是计算机界的英语
     
    3、osi五层协议(有四层,有七层,主要用五层)
    应用层:例如HTTP、mail、ftp,程序员定义的
    传输层:TCP/ UDP,基于端口工作,通过端口找到是电脑中的哪个应用程序
    网络层:IP协议,通过IP地址找到所在局域网
    数据链路层:Ethernet以太网协议在局域网内通过mac地址查找电脑,规定分组标准
    物理层:发送电信号 01010101
  • 相关阅读:
    python+opencv实现图像自适应阈值的均衡化
    ubuntu添加新的分辨率选项(干货)
    python+opencv检测图像清晰度
    python根据列表创建文件夹,拷贝指定文件
    牛客多校Round 4
    牛客多校Round 3
    HDU多校Round 2
    HDU多校Round 1
    牛客多校Round 2
    牛客多校Round 1
  • 原文地址:https://www.cnblogs.com/zhangyaqian/p/py20180418.html
Copyright © 2011-2022 走看看