異常處理_月隱學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.利用封裝和繼承的特性完成如下操作:

class SmallStudent:
    def __init__(self, name, id, age, sex):
        self.name = name
        self.id = id
        self.age = age
        self.sex = sex

    def 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)顯示所有⼈工資情況


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章