异常处理_月隐学python第19课
?
目錄
1. 異常處理
1.1 try-except語句
1.3 拋出異常
1.4 異常嵌套
1.5 assert斷?
1.6 ?定義異常類
作業(yè):
初級
中級
?
1. 異常處理
錯(cuò)誤指的是代碼有語法問題,?法解釋運(yùn)?,必須改正后才能運(yùn)?如果代碼沒有語法問題,可以運(yùn)?,但會(huì)出運(yùn)?時(shí)的錯(cuò)誤,例如除零錯(cuò)誤,下標(biāo)越界等問題,這種在運(yùn)?期間檢測到的錯(cuò)誤被稱為異常 ,出現(xiàn)了異常必須處理否則程序會(huì)終?執(zhí)?,?戶體驗(yàn)會(huì)很差。 Phthon?持程序員??處理檢測到的異常。可以使?try-except語句進(jìn)?異常的檢測和處理
1.1 try-except語句
執(zhí)?流程:
- 1、?先執(zhí)?try中【代碼塊A】,如果出現(xiàn)異常,?即終?代碼執(zhí)?,轉(zhuǎn)?到except塊中進(jìn)?異常處理
- 2、異常處理except模塊可以多個(gè),從上往下匹配,如果能夠匹配成功,?即執(zhí)?相應(yīng)的異常處理代碼塊,執(zhí)?完畢后,不在往下匹配,轉(zhuǎn)到3執(zhí)?
- 3、執(zhí)?異常處理完畢后,如果有finally字句則執(zhí)?finally字句,如果沒有則執(zhí)?【后續(xù)語句】
- 4、如果匹配不到異常,有finally則執(zhí)?finally,然后則拋出錯(cuò)誤,終?程序執(zhí)?。
- 5、如果沒有異常,如果有else字句則執(zhí)?else字句,執(zhí)?完else后,有finally字句則執(zhí)?,沒有則執(zhí)?【后續(xù)語句】
注意事項(xiàng):
- except匹配順序從上到下
- except語句書寫要求:精確的類型往前放,模糊的,不精確的往后放
- except不帶任何類型,則匹配所有類型異常,應(yīng)該放到最后,吞掉異常
- 可以將多種異常?元組的?式(異常類型1,異常類型2...異常類型n)書寫,簡化代碼
- except字句中e,是?個(gè)對象,打印它,會(huì)顯示異常信息描述
- try-except也可以捕獲?法或函數(shù)中拋出的異常
- 所有異常類型都繼承?BaseException,使?BaseException可以將異常??打盡
- finally字句中可以進(jìn)??些清理?作,?如關(guān)閉?件,數(shù)據(jù)庫等?作
1.3 拋出異常
?動(dòng)拋出?個(gè)指定類型的異常,?論是哪種異常類都可以帶?個(gè)字符串參數(shù),對異常進(jìn)?描述。
raise不帶參數(shù)會(huì)把錯(cuò)誤原樣拋出
1.4 異常嵌套
在try塊和excep塊中還可以分別再嵌套try-except塊
1.5 assert斷?
語法: assert 條件 [,異常描述字符串]
執(zhí)?流程:如果條件為假,則拋出AssertionError,條件為真,就當(dāng)assert不存在
作?:對于可能出問題的代碼,加上斷?,?便問題排查
1.6 ?定義異常類
如果系統(tǒng)異常類型滿?不了業(yè)務(wù)需求,那么可以??定義異常類來處理。
??定義的異常類必須繼承BaseException或Exception
步驟:
在?定義異常類的構(gòu)造函數(shù)中,調(diào)??類構(gòu)造函數(shù)
重寫 __str__ ?法輸出異常信息
編寫異常處理?法處理異常
作業(yè):
初級
1.利用封裝和繼承的特性完成如下操作:
2.主?楊夫??向客人 李?姐介紹?己家的寵物狗和寵物貓
中級
1.設(shè)計(jì)一個(gè)Person,包含姓名、年齡和性別三個(gè)私有成員屬性,另外Person類還包含males和females兩個(gè)私有類屬性,用來記錄男?和?生的數(shù)量, 可以通過number_male和number_female兩個(gè)公有類方法獲取males和females兩個(gè)私有類屬性的值。?己完成Person類的設(shè)計(jì),然后實(shí)例化多個(gè)Person的對象, 分別統(tǒng)計(jì)男女的?數(shù)
2.編寫?個(gè)簡單的?資管理程序,系統(tǒng)可以管理以下四類人:
??(worker)、銷售員(salesman)、經(jīng)理(manager)、銷售經(jīng)理(salemanger)。
所有的員?都具有員?號,姓名,?資等屬性,有設(shè)置姓名,獲取姓名,獲取員工號,計(jì)算?資等?法。
1)??:??具有?作?時(shí)數(shù)和時(shí)薪的屬性,?資計(jì)算法方法為?作小時(shí)數(shù)時(shí)薪。
2)銷售員:具有銷售額和提成比例的屬性,?資計(jì)算?法為銷售額提成?例。
3)經(jīng)理:具有固定?薪的屬性,?資計(jì)算?法為固定月薪。
4)銷售經(jīng)理:?資計(jì)算方法為銷售額*提成比例+固定?薪。
請根據(jù)以上要求設(shè)計(jì)合理的類,完成以下功能:
1)添加所有類型的?員
2)計(jì)算?薪
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("請輸入員工崗位(工人/銷售員/經(jīng)理/銷售經(jīng)理):")if worker_post == '工人':while 1:workers_data = input('(注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,工作時(shí)間,時(shí)薪:').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則退出當(dāng)前工種)請輸入工人工號,姓名,銷售額,提成比例:').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 == '經(jīng)理':while 1:sales_data = input('(注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,固定工資:').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 == '銷售經(jīng)理':while 1:sales_data = input('(注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,銷售額,提成比例,固定工資:').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("輸入錯(cuò)誤,請重新輸入")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("""**************歡迎使用小爺工資管理系統(tǒng)**************【1】添加員工【2】輸出人員工資情況【0】退出系統(tǒng)*************************************************""")while 1:n = int(input("請輸入您的選擇:"))if n == 1:staffs = AddWorkers()if n == 2:workers_out(staffs)if n == 0:print('************歡迎再次使用本系統(tǒng)***********')breakPayrollSystem()?運(yùn)行測試結(jié)果
**************歡迎使用小爺工資管理系統(tǒng)**************【1】添加員工【2】輸出人員工資情況【0】退出系統(tǒng)*************************************************請輸入您的選擇:1 請輸入員工崗位(工人/銷售員/經(jīng)理/銷售經(jīng)理):工人 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,工作時(shí)間,時(shí)薪:1001 工一 320 30 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,工作時(shí)間,時(shí)薪:1002 工二 350 35 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,工作時(shí)間,時(shí)薪:ok 是否完成添加(Y/N):N 請輸入員工崗位(工人/銷售員/經(jīng)理/銷售經(jīng)理):銷售員 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,銷售額,提成比例:2001 銷售一 90000 0.1 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,銷售額,提成比例:2002 銷售二 80000 0.1 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,銷售額,提成比例:ok 是否完成添加(Y/N):N 請輸入員工崗位(工人/銷售員/經(jīng)理/銷售經(jīng)理):經(jīng)理 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,固定工資:3001 經(jīng)理一 6000 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,固定工資:3002 經(jīng)理二 5000 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,固定工資:ok 是否完成添加(Y/N):N 請輸入員工崗位(工人/銷售員/經(jīng)理/銷售經(jīng)理):銷售經(jīng)理 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,銷售額,提成比例,固定工資:4001 小金一 80000 0.1 3000 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,銷售額,提成比例,固定工資:4002 小金二 90000 0.1 4000 (注意:輸入ok則退出當(dāng)前工種)請輸入工人工號,姓名,銷售額,提成比例,固定工資:ok 是否完成添加(Y/N):Y 請輸入您的選擇:2 工號 姓名 工資 1001 工一 9600.0 1002 工二 12250.02001 銷售一 9000.0 2002 銷售二 8000.03001 經(jīng)理一 6000.0 3002 經(jīng)理二 5000.04001 小金一 11000.0 4002 小金二 13000.0
?
?
總結(jié)
以上是生活随笔為你收集整理的异常处理_月隐学python第19课的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式 boa服务器移植
- 下一篇: 正则表达式_月隐学python第20课