Python学习第九天

1、异常处理

错误的分类分为:
          1、语法错误(最简单的)  ------> SyntaxError 。 这就会最常见的语法报错!
          2、语义错误(5/0)
          3、逻辑错误(最难排查的)------>逻辑错误不报错!但是不是自己想要的结果

排除错误的方式:try     except
try:后面写的是有可能出现异常的代码!
except 异常类型 as  实例: 捕获特定异常
else:未招异常时。
finally:无论是否遇到异常均会执行! 

#coding=gbk
try:
    x = 5 / 0
    print(x)
except ZeroDivisionError as e:
    print('不能除零',e)
except:
    print('其他异常')
else:
    print('没有异常')
finally:                #中间不管有没有遇到异常,都会执行的!
    print('中间不管有没有遇到异常,都会执行的!')
    

就是有需要资源释放的时候! 我们就需要是用到finally这样的一个异常处理了!就是不管有没有遇到异常! 我们都需要执行finally代码块中的逻辑代码
    真实工作中! 我们遇到异常不能不处理! 通常我们会手动跑出异常! 就是使用raise关键字来手动的抛异常。

 

2、代码测试 (import unittest)

      写类

def get_formatted_name(first,last):
    full_name = '{}   {}'.format(first,last)
    return full_name.title()

print(get_formatted_name('tom','lee'))

  写测试类 

#coding=gbk
import unittest
from Day09Study.test import get_formatted_name

class NameTstCase(unittest.TestCase):
    def test_title_name(self):                            # 名字已test_下划线开头!
        formatted_name = get_formatted_name('tom','lee')
        self.assertEqual(formatted_name,'Tom   Lee')

if __name__ == '__main__':
    unittest.main()

断言一下两个结果是否相等的测试!

 

3、数值、日期、时间

    1、小数格式化、取证与四舍五入
              '数值:{}'.format(a)     在python3.6以后可以这样写:f‘数值:{函数名}’  。 如果我们想要实现以指定格式显示值的话!就要这样写: '数值:{:}'.format(参数名:想要出现的参数的类型)。  冒号的后面是类型。在python3.6版本以后f‘数值:{参数名:参数类型}’ 
          f'数值:{a:-f}'  :显示出来a这个参数,以负数和浮点型展示
          f'数值:{a:+f}' :显示出来a这个参数,以正数和浮点型展示
          f'数值:{a:,f}' : 显示出来a这个参数,以千分为隔的显示!
          f'数值‘:{a:,.2}:显示出来a这个参数,以千分为隔并且只保留小数点后两位的显示! 小数位保留的时候,用到了四舍五入的方式
           x = 18 , y = 23  . '{:.2%}'.format(x / y )  :打印x/y的值!并且保留小数点后两位,然后以百分比的形式展示出来

  对于小数的处理 :  在import math 这个模块中:

       1、 math.trunc(变量名)  :  阶段的意思! 将小数点后面的内容截掉!  没有用到四舍五入
       2、math.floor(变量名):这是一个向下取整的运算,跟四舍五入没有关系!总是像下取整   123.987  = 123
       3、math.ceil(变量名) : 这是一个向上取整的!跟四舍五入没有关系! 总是向上取整:123.111  = 124
       4、round(要传入的值,保留几位小数):这是一个真正的四舍五入,他是一个全局的函数。能控制保留几位小数。

2、随机数的学习

       1、random : 

import random
lis = list(range(1,11))
random.choice(lst)   #从该列表中随机的得到一个值
random.sample(lst,3) #从该列表中随机的拿到三个值  也可以是4个五个! 
random.shuffle(lst)  #将列表中的值随机打乱 

--------以上三种都是对序列、列表进行操作的---------

random.randint(1,10)  #从1-10之间随机取出来一个整数
random.random()       # 随机得到一个小于1的浮点型数据 但是精度比较长
random.getrandbits(5) #生成一个指定比特位数的随机数 .这是给定5个比特位内的随机数!

3、日期与时间的常用操作
           import   datetime : 这个模块都是时间 。
          当我们只关注年月日不考虑时分秒的时候,我们使用date 。
          当我们只关注时分秒,不关注年月日的时候,我们使用的是time。
          当我们即需要年月日!又需要时分秒的时候,我们使用的是datetime。
 

import datetime


datetime.MAXYEAR    #在python中表示最大年份的 
datetime.MINYEAR    #在python中表示最小年份的


today = datetime.date.today()    #获取当前的日期
today.year      #获取当前日期中的年份
today.month     #获取当前日期中的月份
today.day       #获取当前日期中的天数
today.weekday() #获取当前日期对应的周几!  注意周二显示为1 ,周一显示为0 .从0开始显示
today.isoweekday() #根据国际时间获取当前日期对应的周几! 注意周二显示的是2,从1开始显示的!



#自己构造日期,指定某一个人的生日
birthdate = datetime.date(2010,3,12)
birthdate.year   #输出2010  根据自己定义的输出!
#自己构造时间
t = datetime.time(15,26,30)   #参数顺序 , 时,分,秒
t.hour      #输出15   按照自己定义的输出!

dt = datetime.datetime(年,月,日,时,分,秒) #自己构造一个时间


now = datetime.datetime.now()  #
now      # 输出:datetime.datetime(年,月,日,时,分,秒,毫秒)
now.year  # 当前年份

-----------字符串和日期之间的转换---------------------
s = '2018-3-15'
t = datetime.datetime.strptime(s,'%Y-%m-%d')  #将字符串转化为日期时间! 

now = datetime.datetime.now()
txt = now.strftime('%Y/%m/%d')  #将日志转化为字符串




常见的占位符:
         1、 %Y 四位年份
         2、%y  二位年份
         3、%m 二位月份
         4、%d 二位日期
         5、%H 二位小时
         6、%M 二位分钟
         7、%S 二位秒数
         8、%f  微妙
         9、%W 星期数,0...6
        .....

4、时间的计算 : impport datetime

import datetime
d= datetime.datetimr(2018,3,5,22,44)

birthdate = datetime.datetime(2016,5,2,19,33,44)

d - birshdate  #输出 datetime.timedelta(672,11416)  这两个属性第一个参数是表示天数 ,第二个属性表示的是秒数 ,也就是说两个日期想歌672天11416秒
 
diff = d - birshdate    #diff的类型为 。 timedelta类型
diff.day   #ouput : 672
diff.seconds  #output : 11416秒

diff.total_seconds # output : 58072261.0 秒! 也就是说两个日期之间总共相差这个秒数

-------------------------------
#已知一段时间往后推一段时间
o = datetime.datetime(2008,8,8,20,8)
o + datetime.timedelta(days = 100)  #这是在改日期往后推100天的天数
#已知一段时间往前推一段时间
result = d + datetime。timedelta(days =- 100)  #这是往前推100天的天数 。如果吧days换成seconds的话,就是往前推多少秒数。换成hours 就换成了小时

 

  4、unittest单元测试

          1、单元测试概述 :当代码写完以后呢!我们需要看看我们的代码的功能是否完善,我们就需要去测试。单元测试分为
                      1、单元测试 :最小的测试  unittest,对代码最基本单元(函数、方法)的测试 。就是给予特定条件判断结果是否符合预期。
                       2、集成测试
                       3、系统测试
                       4、验收测试
                       5、回归测试

       2、单元测试的案例

            1、导入一个模块 : import unittest     unittest中的asserEqual:断言是否相等的方法

import unittest

def add(a,b):
    return a + b 

#不用单元测试的时候
if __name__ == '__main__':
    result = add(5,3)
    print(result)

#用单元测试的方法 , 首先定义一个我们自己的类,集成unittest这个模块下面的TetCase的=这个基类
class MyTest(unittest.TestCase):
    #定义我们想要实现的功能!这个功能定义在一个方法中,并且约定俗成的以test_开头
    def test_add(self):
        #开始测试,我们知道两个值的和,所以我们定义一个看看是否相等!用assertEqual :断言是否相等
        self.assertEqual(8,add(5,3))  #判断这个8是否和调用这个函数的结果相等

if __name__ == '__main__':
   #使用这个规则运行
   unittest.main()
  #如果输出 ok的话!就说明OK了。

       我们常用的断言方法有哪些呢!?只有这一个断言相等嘛!?不是的!常见的还有:
           1、assertTrue(A in B )  : 断言结果是否为true  : 判断一个变量是否在另外的一个变量中,我们使用的是  in 这个关键字
           2、assertIn(A,B) : 专门来断言判断是否包含的!判断A是否在B中!
           3、assertEqual(3.3 , 1.1 + 2.2) :这个明显是真,但是测试不通过,这时候我们应该使用assertAlmostEqual() : 判断几乎相等
           4、assertIs(A,B) : 判断两个值的地址值是否相等。也就是是否为同一个引用
           5、assertIsNone(A,B):判断函数或者是方法返回的结果是否为None。
           6、assertIsInstance(A,类型) :判断这个字面值或者是变量是不是另外一个类型的实例。
           7、assertGreater(A,B) : 判断是否大于

    3、类与测试装置 : 

        案例 : 

  这是我们自己编写的类:

#coding=gbk

class Calcilator:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def add(self):
        return self.x + self.y
    def subtract(self):
        return self.x - self.y

      这是我们在同级目录下在创建的一个测试类:

# coding=gbk
import unittest
# 写一个测试用例的类
from Day09Study.assertTest import Calcilator


class CalculatorTest(unittest.TestCase):
    def test_add(self):
        c = Calcilator(5, 3)
        self.assertEqual(8,c.add())
    def test_subtract(self):
        c = Calcilator(5,4)
        self.assertEqual(1,c.subtract())
if __name__ == '__main__':
    unittest.main()

 每次测试的时候都需要去定义 c = Calcilator(5, 3) 。太麻烦了! 在unittest中! 给我们定义了一个特殊的函数! 叫setUp,看代码

# coding=gbk
import unittest
# 写一个测试用例的类
from Day09Study.assertTest import Calcilator


class CalculatorTest(unittest.TestCase):
    def setUp(self):   #设置准备安装的意思
       self.c = Calcilator(5, 3)

    def test_add(self):
        # c = Calcilator(5, 3)
        self.assertEqual(8,self.c.add())
    def test_subtract(self):
        # c = Calcilator(5,4)
        self.assertEqual(1,self.c.subtract())
if __name__ == '__main__':
    unittest.main()

注意看后面的改变!在调用c的时候我们就需要使用self.c来调用了! 当我们来测试数据库连接的时候,我们测试完肯定要关掉的! 所以我们还使用unittest模块中自带的tearDown函数

# coding=gbk
import unittest
# 写一个测试用例的类
from Day09Study.assertTest import Calcilator


class CalculatorTest(unittest.TestCase):
    def setUp(self):   #设置准备安装的意思
       self.c = Calcilator(5, 3)

    def test_add(self):
        # c = Calcilator(5, 3)
        self.assertEqual(8,c.add())
    def test_subtract(self):
        # c = Calcilator(5,4)
        self.assertEqual(1,c.subtract())
    def tearDown(self):
        del(self.c)
        
if __name__ == '__main__':
    unittest.main()

这个时候整体的结构就OK了!这就是差不多整体的结构!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值