异常处理_月隐学python第19课
?
目錄
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.利用封裝和繼承的特性完成如下操作:
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课的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式 boa服务器移植
- 下一篇: 自动化测试框架