Day9 Python学习笔记&关键注意点

 Part 1:Python学习笔记

====================

9.错误异常处理

9.1.错误类型

9.1.1.语法错误

  • 看到SyntaxError

9.1.2.语义错误

  1. 看到ZeroDivisionError
  2. 示例:x = 5/0,  print(x),-->  0 不能作为被除数

9.1.3. 逻辑错误

9.2. 异常处理

示例:

1 try:
2     x = 5/0
3     print(x)
4 except ZeroDivisionError as e:
5     print('Cannot divide zero!!!',e)
6 except:
7     print('Other errors!!!')
8 else:
9     print('No error!!!')

9.2.1.try:有可能出现异常的代码

9.2.2.except 异常类型 as 实例:捕获特定异常

示例:try和except的基本错误异常处理代码

 1 class Person:
 2     def __init__(self,name):
 3         self.name = name
 4 
 5 p = Person('Peter')
 6 
 7 try:
 8     print(p.age)
 9 
10 except AttributeError as e:
11     print('Attribute Errors!!!',e)

9.2.3.finally:不管有没有遇到异常,最终都要处理的代码

示例:finally

 1 # finally:      不管有没有遇到异常,最终都要处理的代码
 2 
 3 f = open('data.txt')
 4 
 5 try:
 6     f.read()
 7 
 8 except:
 9     print('File operations have issue!!!')
10 
11 finally:
12     f.close()

9.2.4.else:未遇到异常时

9.2.5.raise:手动抛出异常

 示例:

1 def method():
2     raise NotImplementedError('This method has not been realized by the codes!!!')
3 method()

10.单元测试

10.1.测试级别

10.1.1.单元测试

  • 对代码最基本单元(函数,方法)的测试
  • 给予特定条件判断结果是否符合预期
  • 相对于整个程序的测试,单元测试简化了测试任务
  • unittest 模块
    • 示例1
1 # test.py part
2 
3 def get_formatted_name(first,last):
4     full_name = '{} {}'.format(first,last)
5     return full_name.title()   #title()方法:将每个单词的第一个字母大写
6 
7 print(get_formatted_name('tom','lee'))
 1 #test_name_function.py part
 2 
 3 import unittest
 4 from test import get_formatted_name
 5 
 6 
 7 class NameTestCase(unittest.TestCase):
 8     def test_title_name(self):
 9         formatted_name = get_formatted_name('tom','lee')
10         self.assertEqual(formatted_name,'Tom Leee')    # 故意将Lee写错为Leee,可以跑跑看结果和错误代码
11 
12 
13 if __name__ == '__main__':
14     unittest.main()
    • 示例2
 1 # coder.py part
 2 class Coder:
 3     def __init__(self,name):
 4         self.name = name
 5         self.skills = []
 6 
 7     def mastering_skill(self,skill):
 8         self.skills.append(skill)
 9 
10     def show_skills(self):
11         print('master skills as follows:')
12         for skill in self.skills:
13             print('-',skill)
14 
15 c = Coder('Tom')
16 c.mastering_skill('Python')
17 c.mastering_skill('C#')
18 c.show_skills()
 1 # test_coder part to test the class function
 2 
 3 import unittest
 4 from coder import Coder
 5 
 6 class CoderTestCase(unittest.TestCase):
 7     def setUp(self):
 8         self.c = Coder('Tom')
 9         self.c.skills = ['Python','ASP.Net']
10 
11     def test_skill_in(self):
12         # c = Coder('Tom')
13         # c.mastering_skill('Python')
14         # c.mastering_skill('ASP.NET MVC')
15 
16         self.assertIn('Pythons',self.c.skills)    #故意将Python写错为Pythons,可以跑跑看结果和错误代码
17 
18 if __name__ == '__main__':
19     unittest.main()

10.1.2.集成测试

10.1.3.系统测试

10.1.4.验收测试

10.1.5.回归测试

10.2.代码组织

10.2.1. 断言

  • assertEqual (值,表达式) 是否相等
    • 判断断言测试表达式和函数执行结果,或者表达式结果是否相等
  • assertTrue () 是否为真
  • assertIn () 是否包含
  • assertAlmostEqual () 是否约等于
  • assertIs () 是否为同引用
  • assertIsNone () 是否为空
  • assertIsInstance () 是否某类型实例
  • assertGreater () 是否大于
  • 全部代码示例
 1 import unittest
 2 
 3 person = {'name':'Mike','age':20}
 4 numbers = [1,3,2,88,7,44]
 5 s = 'codeclassroom.com'
 6 
 7 class TestAssert(unittest.TestCase):
 8     def test_assert_method(self):
 9 
10         # self.assertEqual('Mike',person.get('name'))    #判断断言测试表达式和函数执行结果,或者表达式结果是否相等
11         # self.assertTrue('codeclassroom' in s)
12         # self.assertIn('codeclassroom',s)
13         # self.assertAlmostEqual(3.3,1.1+2.2)
14         # self.assertIs(True+1,2)
15         # self.assertIsNone(person.get('name',None))    #故意将Name写错为name,可以跑跑看结果和错误代码
16         # self.assertIsInstance(s, str)
17         self.assertGreater(-7,numbers[0])    #故意将7写错为-7,可以跑跑看结果和错误代码
18 
19 if __name__ == '__main__':
20     unittest.main()

10.2.2.     装置

  • 测试用例类继承自unittest.TestCase
  • test_ 定义功能测试函数名
  • setUp () 函数定义准备初始化的代码
  • tearDown () 函数执行清理工作
  • 全部代码示例
 1 #calculator.py part
 2 class Calculator:
 3     def __init__(self,x,y):
 4         self.x = x
 5         self.y = y
 6 
 7     def add(self):
 8         return self.x + self.y
 9 
10     def subtract(self):
11         return self.x - self.y
12 
13 if __name__ == '__main__':
14         c = Calculator(5,3)
15         print(c.add())
 1 #calculator_test part
 2 import unittest
 3 from calculator import Calculator
 4 
 5 class CalculatorTest(unittest.TestCase):
 6     # Option 1:
 7     # def test_add(self):
 8     #     c = Calculator(5,3)
 9     #     self.assertEqual(8,c.add())
10     #
11     # def test_subtract(self):
12     #     c = Calculator(8,4)
13     #     self.assertEqual(4,c.subtract())
14 
15     # Option 2:
16     def setUp(self):
17         self.c = Calculator(5,3)
18 
19     def test_add(self):
20         self.assertEqual(8,self.c.add())    #Notice to add self.c here!!!
21 
22     def test_subtract(self):
23         self.assertEqual(2,self.c.subtract())    #Notice to add self.c here!!!
24 
25     def tearDown(self):    #假定要释放文件的句柄
26         del self.c
27 
28 
29 if __name__ == '__main__':
30     unittest.main()

11.数值与日期

11.1.数值

11.1.1.格式化

11.1.2.小数位的处理

11.2.随机数random

11.2.1.import random

11.2.2.random.choice() 序列中随机选择一个值

11.2.3.random.sample() 获取指定数目的序列

11.2.4.random.shuffle() 打乱顺序

11.2.5.random.randint() 生成范围内的随机整数

11.2.6.random.random() 生产随机浮点数

11.2.7.random.getrandbits() 生成指定bit位数的随机数

11.3.日期和时间

11.3.1.import datetime

  • date: 年月日
  • time:时分秒
  • datetime:年月日 时分秒
  • 字符串到日期时间 datetime.datetime.strptime('txt','格式')
  • 日期时间到字符串 datetime.datetime.strftime('格式')
  • 占位符

11.3.2. 格式转换

  • %Y 四位年份
  • %y 两位年份
  • %m 两位年份
  • %d 两位日期
  • %H 两位小时
  • %M 两位分钟
  • %S 两位秒数
  • %f 微秒
  • %w 星期数,0...6

11.3.3.时间差 timedelta

  • days
  • seconds
  • hours

 

posted on 2019-08-27 10:39  hemin96  阅读(144)  评论(0)    收藏  举报

导航