面向对象【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 10 , in <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,这个就相当于你开着五菱之光的车,和开着特斯拉的区别。
作者:罗阿红
出处:http://www.cnblogs.com/luoahong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。