Day9 Python学习笔记&关键注意点
Part 1:Python学习笔记
====================
9.错误异常处理
9.1.错误类型
9.1.1.语法错误
- 看到SyntaxError
9.1.2.语义错误
- 看到ZeroDivisionError
- 示例: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
浙公网安备 33010602011771号