zoukankan      html  css  js  c++  java
  • 异常处理及测试

    错误异常处理

    syntax error:语法错误

    zero eivision error:语意错误 ,异常类

    用try拦截服务异常

    try:
    x = 5 / 0
    print(x)
    except:#捕获异常
    print('程序遇到错误')

    try:
        x = 5 / 0
        print(x)
    except ZeroDivisionError:
        print('不能除零')
    except:
        print('其它错误')
    else:
    print('没有异常')
    try:
        x = 5 / 0
        print(x)
    except ZeroDivisionError as e: #as e列出异常消息
        print('不能除零',e)
    except:
        print('其它错误')
    else:
        print('没有异常')
    

      

    
    

     AttibuteError:

    class Person:
        def __init__(self,name):
            self.name = name
    
    p = Person('Peter')
    
    try:
        print(p.age)
    except AttributeError as e:
        print('遇到属性异常',e)
    finally:#不管前面有没有异常,后面都要处理
    f.close()

      测试

    main.py

    def get_formatted_name(first,last):
        full_name = "{} {}".format(first,last)
        return full_name.title()#把每一个单词第一个字母变大写
    
    
    
    #测试
    print(get_formatted_name('tom','lee'))
    

    test_name_function.py

    import unittest #导入单元测试包
    from main import get_formatted_name #导入这个函数
    
    class NameTestCase(unittest.TestCase): #继承基类
        def test_title_name(self):
           formatted_name = get_formatted_name('tom','lee')
           self.assertEqual(formatted_name,"Tom Lee")#判断formattname是否等于tomlee
    
    if __name__ == '__main__':
        unittest.main()

    AssertionError:断言错误

    测试类

    class Coder:
        def __init__(self,name):
            self.name = name
            self.skills = []
    
        def matering_skill(self,skill):
            self.skills.append(skill)
    
        def show_skills(self):
            print('掌握技能:')
            for skill in self.skills:
                print('-',skill)
    
    
    c = Coder('Tom')
    c.matering_skill("Python")
    c.matering_skill('C#')
    c.show_skills()
    

      

    import unittest
    from coder import Coder
    
    class CoderTestCase(unittest.TestCase):
        def setUp(self):
            self.c = Coder('Tom')
            self.c.skills = ['Python','.NET']
    
        def test_skill_in(self):
    
            self.assertIn('Python',self.c.skills) #判断是否在技能里
    
    
    if __name__ == '__main__':
        unittest.main()
    

    unittest单元测试概述



    代码组织

    用cmd运行

    import unittest #单元测试
    
    def add(a,b):
        return a + b
    
    def subtract(a,b):
        return a - b
    
    class MyTest(unittest.TestCase):#继承基类
    
        def test_add(self):
            self.assertEqual(8, add(5,3))#测试add结果是否对,断言是否相等
    
        def test_subtract(self):
            self.assertEqual(2, subtract(5,3))
    
    
    if __name__ == '__main__':
       unittest.main()
    

      

    断言
    判断表达式结果是否相等
    import unittest
    
    """单元测试 断言方法
    """
    person = {'name':'Mike','age':20}
    numbers = [1,3,2,88,7,44]
    s = '优品课堂 codeclassroom.com'
    
    class TestAssert(unittest.TestCase):
        def test_assert_methond(self):
            self.assertEqual('Mike',person.get('name'))#从字典表获取键值
            pass
    
    if __name__ == '__main__':
        unittest.main()
    返回Ture false
    import unittest
    
    """单元测试 断言方法
    """
    person = {'name':'Mike','age':20}
    numbers = [1,3,2,88,7,44]
    s = '优品课堂 codeclassroom.com'
    
    class TestAssert(unittest.TestCase):
        def test_assert_methond(self):
            #self.assertEqual('mike',person.get('name'))#从字典表获取键值
            self.assertTrue('优品课堂' in s)
    
    if __name__ == '__main__':
        unittest.main()
    
    
    
    import unittest
    
    """单元测试 断言方法
    """
    person = {'name':'Mike','age':20}
    numbers = [1,3,2,88,7,44]
    s = '优品课堂 codeclassroom.com'
    
    class TestAssert(unittest.TestCase):
        def test_assert_methond(self):
            #self.assertEqual('mike',person.get('name'))#从字典表获取键值
            #self.assertTrue('优品课堂' in s)
            self.assertIn('优品课堂',s)
    
    if __name__ == '__main__':
        unittest.main()
    

     类与测试装置

    #self.assertEqual('mike',person.get('name'))#从字典表获取键值
    #self.assertTrue('优品课堂' in s)
    #self.assertIn('优品课堂',s)
    #self.assertAlmostEqual(3.3,1.1 + 2.2)
    #self.assertIs(True + 1, 2)
    #self.assertIsNone(person.get('Name', None))
    #self.assertIsNone(numbers[0],int)
    self.assertGreater(7, numbers[0])
    创建一个calculator.py
    """计算器
    """
    
    class Calculator:
        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
    
    if __name__ == '__main__':
        c = Calculator(5,3)
        print(c.add())

    创建一个test文件夹,里面放入calculator_test.py
    import unittest
    from calculator import Calculator
    """Code Description
    """
    
    class CalculatorTest(unittest.TestCase):
        def setUp(self):
            self.c = Calculator(5,3)
    
    
        def test_add(self):
            #c = Calculator(5,3)
            self.assertEqual(8,self.c.add())
    
        def test_subtract(self):
            #c = Calculator(8,4)
            self.assertEqual(4,self.c.subtract())
    
    if __name__ == '__main__':
        unittest.main()
    

     







    小数格式化、取证与四舍五入
    >>>'数值:{}.format(a)'
    >>>f'数值:{a}'#同上
    b = 1234567890.123456
    f'数值:{b}'
    Out[3]: '数值:1234567890.123456'
    f'数值:{b:f}'
    Out[4]: '数值:1234567890.123456'
    f'数值:{b:,f}'
    Out[5]: '数值:1,234,567,890.123456'
    f'数值:{b:,.2f}'
    Out[6]: '数值:1,234,567,890.12

    b = 1234567890.123456
    f'数值:{b}'
    Out[3]: '数值:1234567890.123456'
    f'数值:{b:f}'
    Out[4]: '数值:1234567890.123456'
    f'数值:{b:,f}'
    Out[5]: '数值:1,234,567,890.123456'
    f'数值:{b:,.2f}'
    Out[6]: '数值:1,234,567,890.12


    ceil:向上取整
    floor:向下取整
    round:四舍五入
    trunc:对值进行截断

    random随机处理

    生成随机浮点数或小数

    1、#生成0-1之间的浮点数

    import random
    rnd = random.random()
    print(rnd)

    返回

    0.4116634571675989

    2、#生成0-1之间的浮点数,2位精度

    rnd = round(random.random(),2)
    print(rnd)

    返回

    0.86

    3、#生成[1,100]之间的浮点数;

    rnd = random.uniform(1, 100)
    print(rnd)

    返回

    40.46081911647691

    4、#生成[1,100]之间的浮点数,2位精度

    rnd = round(random.uniform(1, 100),2)
    print(rnd)

    返回

    81.31

    生成整数、奇数、偶数

    1、#生成[1,100]之间的整数

    rnd = random.randint(1, 100)
    print(rnd)

    返回

    79

    2、#生成[1,100]之间的整数,加百分号

    rnd = str(random.randint(1, 100)) + "%"
    print(rnd)

    返回

    87%


    3、#生成[1,100]之间的奇数

    rnd = random.randrange(1, 100, 2)
    print(rnd)

    返回

    93

    4、#生成[2,100]之间的偶数

    rnd = random.randrange(2, 100, 2)
    print(rnd)

    返回

    26

    序列中随机取元素

    #从序列中随机取一个元素
    rnd = random.choice(['剪刀', '石头', '布'])
    print(rnd)

    返回

    剪刀

    生成随机字符串

    #生成字母数字组成的32位密钥,来源 比特量化
    rnd = ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',32))
    print(rnd)

    返回

    43bFuQln6fkGjmH1OCE9aweLz08WTsIA


    扑克洗牌

    poker = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
    random.shuffle(poker)
    print(poker)

    返回

    ['9', 'A', '10', 'K', 'Q', '3', '6', 'J', '4', '7', '5', '8', '2']





    日期与时间常用操作
    模块:
    time:time是一个仅包含与日期和时间相关的函数和常量的模块,在本模块中定义了C/C++编写的几个类。例如,struct_time类
    datetime:datetime是一个使用面向对象编程设计的模块,可以在Python中使用日期和时间。它定义了几个表示日期和时间的类
    calendar:日历是一个提供函数的模块,以及与Calendar相关的几个类,它们支持将日历映像生成为text,html,….
    locale:该模块包含用于格式化或基于区域设置分析日期和时间的函数。

    时间字符串支持的格式符号:
     1 格式  含义  备注
     2 %a  本地(locale)简化星期名称
     3 %A  本地完整星期名称
     4 %b  本地简化月份名称
     5 %B  本地完整月份名称
     6 %c  本地相应的日期和时间表示
     7 %d  一个月中的第几天(01 - 31)
     8 %H  一天中的第几个小时(24小时制,00 - 23)
     9 %I  第几个小时(12小时制,01 - 12)
    10 %j  一年中的第几天(001 - 366)
    11 %m  月份(01 - 12)
    12 %M  分钟数(00 - 59)
    13 %p  本地am或者pm的相应符
    14 %S  秒(01 - 61)
    15 %U  一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
    16 %w  一个星期中的第几天(0 - 6,0是星期天)
    17 %W  和%U基本相同,不同的是%W以星期一为一个星期的开始。
    18 %x  本地相应日期
    19 %X  本地相应时间
    20 %y  去掉世纪的年份(00 – 99)
    21 %Y  完整的年份
    22 %Z  时区的名字(如果不存在为空字符)
    23 %%  ‘%’字符
    
    
     1 import time
     2  
     3 ticks = time.time()
     4  
     5 # 这种格式不能表示在时代(1970年1月1日上午12:00)之前的日期。只能表示之后日期并且截止点为3038年的某个时刻,在未来的日子也不能以这种方式表示
     6 print("Number of ticks since 12:00am, January 1, 1970:", ticks)
     7  
     8 # 获取当前本地时间
     9 localtime =time.localtime(time.time())
    10 print("Local current time :", localtime)
    11 
    12 # 当前时间格式化
    13 curtime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
    14 print(curtime)
    15 # 也可以使用asctime()进行时间格式化
    16 print(time.asctime(localtime))

    datetime模块使用:
    from datetime import date
    from datetime import datetime
    from datetime import timedelta
     
    # 计算两个日期相差多少天
    d1 = date(2018, 10, 18);
    d2 = date(2017, 12, 31);
     
    print("(2018, 10, 18)与(2017, 12, 31)相差:", (d1 - d2).days, "天!");
     
    # 获取两个日期时间的时间差
    time1 = datetime(2019, 1, 13, 12, 0, 0);
    time2 = datetime.now();
    differtime = (time1 -time2).total_seconds();
    print("(2019,1,13,12,0,0)与当前时间相差:", differtime, "秒!");# 输出结果
      
    # 当前日期
    curdate = date.today();
    print("curdate =",curdate);
      
    # 计算十天之后的日期时间
    nowday = datetime.now();
    # timedelta类可以很容易地算出前几天和后几天的时刻。(timedelta(days= d, hours= h))
    # 还可以查看第几周对应的时间,例如:timedelta(weeks=20) 20周将被自动转化为天数
    # 前几天时刻,用减法。  后几天时刻,则用当前时间加上timedelta(days = d, hours= h)
    lastday = nowday + timedelta(days=10);
    print(str(lastday));
    print(lastday.ctime());# ctime()  返回一个表示日期和时间的字符串。
      
    # 查看某一天是今年的第几天和第几周
    testday = date(2017, 8, 31);
    print(testday.isocalendar());# isocalendar() 函数返回三元组    分别为:年份,周数,周几
    print(testday.timetuple());# timetuple()  返回时间元祖

    timedelta

    In [158]: now - timedelta(seconds=1)
    Out[158]: datetime.datetime(2016, 4, 23, 16, 32, 59, 143269)
    In [159]: now - timedelta(seconds=1)
    Out[159]: datetime.datetime(2016, 4, 23, 16, 32, 59, 143269)
    In [160]: now - timedelta(hours=1)
    Out[160]: datetime.datetime(2016, 4, 23, 15, 33, 0, 143269)
    In [161]: now - timedelta(days=1)
    Out[161]: datetime.datetime(2016, 4, 22, 16, 33, 0, 143269)
    In [162]: now - timedelta(minutes=1)
    Out[162]: datetime.datetime(2016, 4, 23, 16, 32, 0, 143269)























  • 相关阅读:
    memory runs at single channel问题解决
    ASP php获取文件URL地址等方法
    zencart的modules下数据库操作templates排版和common首页引用
    php生成html 伪静态??
    Linux服务器自动备份压缩MySQL数据库的实用方法
    dos 命令集
    Zencart 500错误查找和解决方法
    破解JS加密:url unicode加密而已
    .htaccess 保护文件夹
    TCP 的那些事儿(上)
  • 原文地址:https://www.cnblogs.com/shirleysu90/p/12027542.html
Copyright © 2011-2022 走看看