目录

1. 异常处理

1.1 try-except语句

1.3 抛出异常

1.4 异常嵌套

1.5 assert断⾔

1.6 ⾃定义异常类

作业:

初级

中级



1. 异常处理

错误指的是代码有语法问题,⽆法解释运⾏,必须改正后才能运⾏如果代码没有语法问题,可以运⾏,但会出运⾏时的错误,例如除零错误,下标越界等问题,这种在运⾏期间检测到的错误被称为异常 ,出现了异常必须处理否则程序会终⽌执⾏,⽤户体验会很差。 Phthon⽀持程序员⾃⼰处理检测到的异常。可以使⽤try-except语句进⾏异常的检测和处理

1.1 try-except语句

执⾏流程:

  • 1、⾸先执⾏try中【代码块A】,如果出现异常,⽴即终⽌代码执⾏,转⽽到except块中进⾏异常处理
  • 2、异常处理except模块可以多个,从上往下匹配,如果能够匹配成功,⽴即执⾏相应的异常处理代码块,执⾏完毕后,不在往下匹配,转到3执⾏
  • 3、执⾏异常处理完毕后,如果有finally字句则执⾏finally字句,如果没有则执⾏【后续语句】
  • 4、如果匹配不到异常,有finally则执⾏finally,然后则抛出错误,终⽌程序执⾏。
  • 5、如果没有异常,如果有else字句则执⾏else字句,执⾏完else后,有finally字句则执⾏,没有则执⾏【后续语句】

注意事项:

  • except匹配顺序从上到下
  • except语句书写要求:精确的类型往前放,模糊的,不精确的往后放
  • except不带任何类型,则匹配所有类型异常,应该放到最后,吞掉异常
  • 可以将多种异常⽤元组的⽅式(异常类型1,异常类型2...异常类型n)书写,简化代码
  • except字句中e,是⼀个对象,打印它,会显示异常信息描述
  • try-except也可以捕获⽅法或函数中抛出的异常
  • 所有异常类型都继承⾃BaseException,使⽤BaseException可以将异常⼀⽹打尽
  • finally字句中可以进⾏⼀些清理⼯作,⽐如关闭⽂件,数据库等⼯作

1.3 抛出异常

⼿动抛出⼀个指定类型的异常,⽆论是哪种异常类都可以带⼀个字符串参数,对异常进⾏描述。
raise不带参数会把错误原样抛出

1.4 异常嵌套

在try块和excep块中还可以分别再嵌套try-except块

1.5 assert断⾔

语法: assert 条件 [,异常描述字符串]
执⾏流程:如果条件为假,则抛出AssertionError,条件为真,就当assert不存在
作⽤:对于可能出问题的代码,加上断⾔,⽅便问题排查

1.6 ⾃定义异常类

如果系统异常类型满⾜不了业务需求,那么可以⾃⼰定义异常类来处理。
⾃⼰定义的异常类必须继承BaseException或Exception
步骤:
在⾃定义异常类的构造函数中,调⽤⽗类构造函数
重写 __str__ ⽅法输出异常信息
编写异常处理⽅法处理异常

作业:

初级

1.利用封装和继承的特性完成如下操作:

class SmallStudent:def __init__(self, name, id, age, sex):self.name = nameself.id = idself.age = ageself.sex = sexdef learn(self,course):print("{}学习的内容为:{}".format(self.name,course))return "{}学习的内容为:{}".format(self.name,course)def fight(self):print("打架")xiaoming = SmallStudent("小明", 10010, 8, '男')
xiaoming.learn("语文 数学 英语")class MiddleStudent(SmallStudent):def __init__(self, name, id, age, sex):super().__init__(name, id, age, sex)def fall_in_love(self):print("谈恋爱")xiaoer = MiddleStudent("小二",20020,12,'男')
xiaoer.learn("语数外 生物化 史地政")class BigStudent(MiddleStudent):def __init__(self, name, id, age, sex):super().__init__(name, id, age, sex)def skip_classes(self):print("{}逃课中。。。。。".format(self.name))xiaosan = BigStudent("小三",30030,19,"女")
xiaosan.skip_classes()

2.主⼈杨夫⼈ 向客人 李⼩姐介绍⾃己家的宠物狗和宠物猫

中级

1.设计一个Person,包含姓名、年龄和性别三个私有成员属性,另外Person类还包含males和females两个私有类属性,用来记录男⽣和⼥生的数量, 可以通过number_male和number_female两个公有类方法获取males和females两个私有类属性的值。⾃己完成Person类的设计,然后实例化多个Person的对象, 分别统计男女的⼈数

2.编写⼀个简单的⼯资管理程序,系统可以管理以下四类人:

⼯⼈(worker)、销售员(salesman)、经理(manager)、销售经理(salemanger)。

所有的员⼯都具有员⼯号,姓名,⼯资等属性,有设置姓名,获取姓名,获取员工号,计算⼯资等⽅法。

1)⼯⼈:⼯⼈具有⼯作⼩时数和时薪的属性,⼯资计算法方法为⼯作小时数时薪。

2)销售员:具有销售额和提成比例的属性,⼯资计算⽅法为销售额提成⽐例。

3)经理:具有固定⽉薪的属性,⼯资计算⽅法为固定月薪。

4)销售经理:⼯资计算方法为销售额*提成比例+固定⽉薪。

请根据以上要求设计合理的类,完成以下功能:

1)添加所有类型的⼈员

2)计算⽉薪

3)显示所有⼈工资情况


class Worker:def __init__(self, id, name, work_hours, hour_value):self.id = idself.name = nameself.work_hours = work_hoursself.hour_value = hour_valuedef salary(self):return float(self.work_hours) * float(self.hour_value)class Salesman:def __init__(self, id, name, sale, rate):self.id = idself.name = nameself.sale = saleself.rate = ratedef salary(self):return float(self.sale) * float(self.rate)class Manager:def __init__(self, id, name, fixed):self.id = idself.name = nameself.fixed = fixeddef salary(self):return float(self.fixed)class Salesmanager:def __init__(self, id, name, sale, rate, fixed):self.id = idself.name = nameself.sale = saleself.rate = rateself.fixed = fixeddef salary(self):return float(self.sale) * float(self.rate) + float(self.fixed)aa = Salesmanager(1001, 'AA', 8000, 0.2, 1000)
print(aa.salary())def AddWorkers():workers = []salesmans = []managers = []salesmanagers = []while 1:worker_post = input("请输入员工岗位(工人/销售员/经理/销售经理):")if worker_post == '工人':while 1:workers_data = input('(注意:输入ok则退出当前工种)请输入工人工号,姓名,工作时间,时薪:').split(" ")if workers_data[0] == 'ok' or workers_data[0] == 'OK':breakworkers.append(Worker(workers_data[0], workers_data[1], workers_data[2], workers_data[3]))elif worker_post == '销售员':while 1:sales_data = input('(注意:输入ok则退出当前工种)请输入工人工号,姓名,销售额,提成比例:').split(" ")if sales_data[0] == 'ok' or sales_data[0] == 'OK':breaksalesmans.append(Salesman(sales_data[0], sales_data[1], sales_data[2], sales_data[3]))elif worker_post == '经理':while 1:sales_data = input('(注意:输入ok则退出当前工种)请输入工人工号,姓名,固定工资:').split(" ")if sales_data[0] == 'ok' or sales_data[0] == 'OK':breakmanagers.append(Manager(sales_data[0], sales_data[1], sales_data[2]))elif worker_post == '销售经理':while 1:sales_data = input('(注意:输入ok则退出当前工种)请输入工人工号,姓名,销售额,提成比例,固定工资:').split(" ")if sales_data[0] == 'ok' or sales_data[0] == 'OK':breaksalesmanagers.append(Salesmanager(sales_data[0], sales_data[1], sales_data[2], sales_data[3], sales_data[4]))else:print("输入错误,请重新输入")done = input("是否完成添加(Y/N):")if done == 'Y' or done == 'y':breakstaffs = [workers, salesmans, managers, salesmanagers]return staffsdef workers_out(workers):print("{:<2}\t {:<2}\t {:<2}".format('工号', '姓名', '工资'))for post in workers:for worker in post:print("{:<2}\t {:<2}\t {:<2}".format(worker.id, worker.name, worker.salary()))print()def PayrollSystem():print("""**************欢迎使用小爷工资管理系统**************【1】添加员工【2】输出人员工资情况【0】退出系统*************************************************""")while 1:n = int(input("请输入您的选择:"))if n == 1:staffs = AddWorkers()if n == 2:workers_out(staffs)if n == 0:print('************欢迎再次使用本系统***********')breakPayrollSystem()

运行测试结果

   **************欢迎使用小爷工资管理系统**************【1】添加员工【2】输出人员工资情况【0】退出系统*************************************************请输入您的选择:1
请输入员工岗位(工人/销售员/经理/销售经理):工人
(注意:输入ok则退出当前工种)请输入工人工号,姓名,工作时间,时薪:1001 工一 320 30
(注意:输入ok则退出当前工种)请输入工人工号,姓名,工作时间,时薪:1002 工二 350 35
(注意:输入ok则退出当前工种)请输入工人工号,姓名,工作时间,时薪:ok
是否完成添加(Y/N):N
请输入员工岗位(工人/销售员/经理/销售经理):销售员
(注意:输入ok则退出当前工种)请输入工人工号,姓名,销售额,提成比例:2001 销售一 90000 0.1
(注意:输入ok则退出当前工种)请输入工人工号,姓名,销售额,提成比例:2002 销售二 80000 0.1
(注意:输入ok则退出当前工种)请输入工人工号,姓名,销售额,提成比例:ok
是否完成添加(Y/N):N
请输入员工岗位(工人/销售员/经理/销售经理):经理
(注意:输入ok则退出当前工种)请输入工人工号,姓名,固定工资:3001 经理一 6000
(注意:输入ok则退出当前工种)请输入工人工号,姓名,固定工资:3002 经理二 5000
(注意:输入ok则退出当前工种)请输入工人工号,姓名,固定工资:ok
是否完成添加(Y/N):N
请输入员工岗位(工人/销售员/经理/销售经理):销售经理
(注意:输入ok则退出当前工种)请输入工人工号,姓名,销售额,提成比例,固定工资:4001 小金一 80000 0.1 3000
(注意:输入ok则退出当前工种)请输入工人工号,姓名,销售额,提成比例,固定工资:4002 小金二 90000 0.1 4000
(注意:输入ok则退出当前工种)请输入工人工号,姓名,销售额,提成比例,固定工资:ok
是否完成添加(Y/N):Y
请输入您的选择:2
工号   姓名  工资
1001     工一  9600.0
1002     工二  12250.02001     销售一     9000.0
2002     销售二     8000.03001  经理一     6000.0
3002     经理二     5000.04001  小金一     11000.0
4002     小金二     13000.0

异常处理_月隐学python第19课相关推荐

  1. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  2. 函数进阶_月隐学python第11课

    目录 1.函数类型 2. 匿名函数 3.传入函数(理解) 4.闭包 5.偏函数 6.变量的作用域 6.1 变量作用域的分类 6.2 变量作⽤域查找规则 6.3 全局变量和局部变量 6.4 global ...

  3. 字典与集合_月隐学python第8课

    一.字典 字典属于无序列,元素存放无序,是通过哈希方式进行数据存取的,字典是一个可变容器,字典中保存一个的键值对: key : value.我们通过key来获取对应的值,很类似我们的汉语字典. 字典中 ...

  4. 字符串_月隐学python第7课

    一.字符串 字符串就是由若干个不同的unicode字符组成的不可变序列 1 .字符串创建 2.获取字符 因为是不可变序列,所以不能修改单个字符: 凡是修改字符串的操作都产生新串 3.字符串转义 常⻅转 ...

  5. 列表_月隐学python第6课

    在python中,有这样一些类型,它们的成员是有序排列的,并且可以通过下标访问成员,这些类型称之为有序序列,包括:列表.元组和字符串:其中列表的成员可修改,属于可变序列,字符串和元组,成员不可修改,属 ...

  6. 数据类型和运算符_月隐学python第3课

    1.类型判断 我们可以使⽤用type来返回数据类型和⽤用isinstance判断数据类型 2. 运算符和表达式 在数学上为了了计算结果,我们会写⼀一些式⼦子计算,例例如: 30 + 5 这是数学中的算 ...

  7. mysql高级之子查询,多表查询,外连接,集合操作,内部函数与数据控制_月隐学python第24课

    目录 ⼀.⾼级 1.1 ⼦查询 1.2 多表查询 1.3 外连接 1.4 集合操作 1.5 内部函数 ⼆.数据控制 2.1 事务 2.2 授权管理 ⼀.⾼级 1.1 ⼦查询 ⼦查询嵌⼊到其他查询语句中 ...

  8. mysql练习_创建库与列表、增加列表信息、列表查询(包含多列表查询)_月隐学python第23课

    目录 一 .题目与设计 二  .运行结果 一 .题目与设计 SHOW DATABASES; drop DATABASE student;-- **********创建库**************** ...

  9. mysql基础_月隐学python第22课

    目录 ⼀.数据库基本概念 常⻅的数据库: MySQL简介 mysql的安装 linux下 windows下安装 ⼆. SQL 三.操作数据库 四.数据库表 例子: 五.数据类型 数值型 字符型​ ⽇期 ...

最新文章

  1. 双 11 的狂欢,干了这碗「流量防控」汤
  2. Android仿微信聊天语言点击喇叭动画效果
  3. koa2 mysql 中间件_Koa2 和 Express 中间件对比
  4. 基于spring-boot的社区社交微信小程序,适合做脚手架、二次开发
  5. 怎样安装ubuntu系统
  6. 【报告分享】2019年用户生命周期运营白皮书(京东尼尔森出品).pdf(附下载链接)
  7. python 数据写入json文件时中文显示Unicode编码问题
  8. 我的Python成长之路---第三天---Python基础(9)---2016年1月16日(雾霾)
  9. [Java]toString的用法
  10. Java 重写(Override)与重载(Overload)区别
  11. git创建本地代码库
  12. 51单片机串口输出某些汉字乱码修复补丁(支持所有keil版本)
  13. 什么样的域名是一级域名?和二级域名有什么关系?
  14. Android计步模块(类似微信运动 今日步数)
  15. SCRCPY与Android操作流程(华为手机) 原创超详细
  16. Unity 自发光(燃烧)溶解Shader
  17. Android 屏幕适配方案(七)
  18. 《天天学敏捷:Scrum团队转型记》读书笔记
  19. 夸克网盘提取cookie
  20. 二层基本知识点(二)

热门文章

  1. Launchpad services provided in HANA XS in multitenant
  2. 创建新的SAP CRM product search scenario - 如何在SAP CRM里实现自定义的产品搜索场景
  3. webpack里JavaScript文件编译的调试
  4. 有道云笔记不需要通过开通会员的方式来去除广告显示
  5. Hyperledger(超级账本)的worldstate和SAP CRM的CRMD_CUMULAT_H
  6. java redis缓存实例_spring项目整合ehcache和redis缓存实例
  7. 【linux】linux系统配置静态IP地址(超详细,手把手教会)
  8. linux cp 目录不存在自动创建,Linux运维知识之Linux:复制并创建目标目录,如果它不存在...
  9. 堆和栈的概念和区别 python_堆和栈的区别是啥?
  10. python骂人的程序_Python实现敏感词过滤的4种方法