zoukankan      html  css  js  c++  java
  • 面向对象【day08】:异常处理-断言(七)

    本节内容

    1、概述

    2、知识点回顾

    3、断言

    一、概述

      python中断言,这个我是第一次听说到的,断言有什么用呢?断言就是做一些程序的检查工作,就是在执行之前需要做的一些检查,比如类似于安检一样,合格的就能过,不合格的就不能过。也类似于银行转账工作,真正的转账之前是不是要检查用户各方面,是不是账号密码是不是都没有问题,转的钱必须没有问题,所以你在这个操作之前做一下检查。

    二、知识点回顾

    1、__new__方法:

      先于__init__方法之前执行

    2、__call__方法:

      实例化之后加括号,去执行__call__方法

    3、__metaclass__:

      用来定义这个类是以怎样的形式被创建的

    4、异常处理:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    try:
     
      ....
     
    except (ValueError,KeyError),e    # in 2.7写法
     
    except (ValueError,KeyError) as e   # in3.X写法
     
    except Exception as e :放在异常最后,上面抓不到的异常全走这个
     
    else#没有异常发生时,执行
     
    finally,无论如何都执行
     
    raise ValueError  : 抛出异常

    5、断言:

      下面单独讲

    6、socket:

      协议:tcp/ip    send,recv

         udp

      地址簇(family address):

         AF.INET       ipv4

         AF.INET6     ipv6

         AF.UNIX      local

      协议类型(socket type protocol):

         socket.SOCK_STREAM   tcp/ip

         socket.SOCK_DGRAM    数据格式socket,for UDP

      服务端:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    server = socket.socket(AF.INET,sock.SOCK_STREAM)
    server.bind((localhost,6969))
    server.listen()
     
    conn,addr = server.accept()  #每当和客户端建立一个连接,就会生成一个实例,这个实例的值赋给conn,这边会产生阻塞
     
    while True:
        print("new conn",addr)
        data = conn.recv(1024)  #官方推荐是8192,相当于8k
        if not data:break  #客户端一断开,conn.recv收到的就都是空数据,就会进入死循环
        print(data)
        conn.send(data.upper())

       客户端:

    1
    2
    3
    4
    5
    client = socket.socket()
    clent.connect((serverip,6969))
    client.send(data)
    client.send(data)#这边可以发送多次
    data = client.recv(1024)

    三、断言

    作用:断言被用作你接下来的程序执行,如果后面程序依赖于前面的程序,后面的程序有很重要,就是后面的程序执行肯定不能出错,所以在执行之前要做检查工作。

    3.1、断言关键字assert

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class C(object):
     
        def __init__(self):
            self.name = "zhangqigao"
     
    c_obj = C()
     
    assert c_obj.name  == "zhangqigao"   #断言
     
    print("没有错误继续...")
     
    #输出
    没有错误继续...

    3.2、断言出错

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class C(object):
     
        def __init__(self):
            self.name = "zhangqigao"
     
    c_obj = C()
     
    assert c_obj.name  == "gaogao"   #断言出字符串不匹配
     
    print("没有错误继续...")
     
     
    #输出
    Traceback (most recent call last):
      File "E:/PycharmProjects/pytest/day7/断言.py", line 10in <module>
        assert c_obj.name  == "gaogao"
    AssertionError   #报断言异常错误

     当然我们用我们之前的知识也是可以解决上面的问题,代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class C(object):
     
        def __init__(self):
            self.name = "zhangqigao"
     
    c_obj = C()
     
    if c_obj.name  == "gaogao":
        print("有错误....")
    else:
        print("没有错误继续...")

    但是这个不仅增加了代码量,而且感觉还是比较low,这个就相当于你开着五菱之光的车,和开着特斯拉的区别。

  • 相关阅读:
    git本地及远程分支回退
    Git怎样撤销一次分支的合并Merge
    git仓库迁移的两种解决方案
    【转】Linux下mysql操作
    Linux下tomcat相关操作
    Linux下top命令详解
    Linux下crontab详解
    Linux下mysql安装
    Linux下RPM包管理
    Linux下用户组、文件权限详解
  • 原文地址:https://www.cnblogs.com/luoahong/p/9895937.html
Copyright © 2011-2022 走看看