1.類的限制(重點): 寫一個父類. 父類中的某個方法要抛出一個異常 NotImplementError # 項目經理 class Base: # 對子類進行了限制. 必須重寫該方法 # 以後上班了. 拿到公司代碼之後. 發現了notImplementedError 繼承他 直接重寫他 def login(self): # 沒有被實作錯誤 raise NotImplementedError("你要重寫一下login這個方法. 否則報錯!") # 抛異常 . class Member(Base): def login(self): print("我是普通人登入") class BaWu(Base): def login(self): print("吧務登入") class Houtai(Base): def login(self): # 報錯, 上層程式員寫代碼沒有按照規範來 print("背景登入") # 整合這些個功能 def deng(obj): obj.login() m = Member() bw = BaWu() ht = Houtai() deng(m) deng(bw) deng(ht) 抽象類和抽象方法: from abc import ABCMeta, abstractmethod class Base(metaclass = ABCMeta): @abstractmenthod def fangfa(self): pass # 抽象類和抽象方法 -> java c# # 抽象方法不需要給出具體的方法體. 抽象方法内隻寫一個pass就可以了 # 在一個類中如果有一個方法是抽象方法. 那麼這個類一定是一個抽象類 # 抽象類中. 如果有抽象方法. 此時這個類不能建立對象 # 如果一個類中所有的方法都是抽象方法. 這個類可以被稱為接口類 # 寫一個抽象方法:導入一個子產品 from abc import ABCMeta, abstractmethod # 此時抽象類不能建立對象 class Animal(metaclass=ABCMeta): # 寫完這東西. 就是個抽象類 @abstractmethod # 抽象方法 def chi(self): pass # 吃應該隻是一個抽象概念. 沒辦法完美的描述出來吃什麼東西 # 抽象類中可以有正常的方法 def dong(self): print("動物會動") # class Cat(Animal): # 此時貓裡面也有一個抽象方法, 此時的貓是建立不了對象的 # pass class Cat(Animal): def chi(self): # 重寫父類中的抽象方法 print("貓喜歡吃魚") a = Cat() a.chi() a.dong() 2.異常處理. try cxcept raise(重點) try: 代碼 except 異常類: 除了錯,如何處理異常 except 異常類: 除了錯,如何處理異常 except 異常類: 除了錯,如何處理異常 else: 當程式不出錯 finally: 不管出不出錯,都要執行 處理異常: 在python中可以通過try.....except... 來處理錯誤 try: print(1 / 0) except Exception: print("出錯了, 出現了ZeroDivisionError") print("哈哈哈哈哈哈哈") # 可以正常運作. 所有的異常的根是Exception, 所有的異常類都會預設繼承Exception try: print(1/10) # f = open("哈哈哈哈哈", mode="r") # d = {[]:123} except ZeroDivisionError: # 可以處理所有錯誤 print("除以0出錯了") except FileNotFoundError: print("檔案不存在的錯誤") except Exception: # 兜底的 print("其他錯誤") else: # 當try中的代碼不産生任何錯誤的時候. 會自動的執行else裡的代碼 pass finally: # 最終. 不管出錯還是不出錯. 都要執行最後的finally 一般用來收尾 print("哈哈哈哈哈哈哈哈啊哈") 如何手動抛出異常和如何自己定義異常 raise 異常類('資訊') class 類(Exception): pass 自己定義異常 def cul(a, b): # 隻能是數字相加 if (type(a) == int or type(a) == float ) and (type(b) == int or type(b) == float): return a + b else: # 抛出異常 # raise 異常類(錯誤資訊) raise CulException("我沒辦法給你處理這樣的運算") print(cul("就不放, 氣死你",2)) class JackException(Exception): 如何自己定義異常 pass import traceback traceback.format_exc() ###用來檢視堆棧資訊(錯誤資訊叫堆棧資訊) class Person: def __init__(self, name, gender): self.name = name self.gender = gender def xizao(self): print(f"{self.name}在洗澡") def nan_zao_tang_zi(ren): if ren.gender == "男": ren.xizao() else: raise GenderException("性别不對. 去對門看看") # 抛異常是很重要的 try: p1 = Person("趙亞磊", "不知道") p2 = Person("婁鲲鵬", "男") nan_zao_tang_zi(p1) nan_zao_tang_zi(p2) except GenderException: # ret = traceback.format_exc() # 檢視堆棧資訊, 看錯誤的 # print(ret) print("出錯了. 很可惜") 3.MD5 加密 import hashlib obj = hashlib.md5(b'鹽') obj.update(b'要加密的内容') print(obj.hexdigest()) md5對象 obj = hashlib.md5(b"jflkasdjklfjaskljfdfjdsakljfklajsklfjaskljfklasjklasj") # 加鹽 obj.update("123456".encode("utf-8")) # 把要加密的内容給md5 print(obj.hexdigest()) # 拿到密文534b44a19bf18d20b71ecc4eb77c572f 應用 username = "wusir" password = "3e29aa0dc8a38b43c3479566cafc3cbe" # 登入 uname = input("請輸入你的使用者名") upwd = input("請輸入你的密碼") # 123456 if uname == username and my_md5(upwd) == password: print("登入成功") else: print("登入失敗") 4.日志處理(不要記,留一份,側重點在用) 等級: critical: 50 error :40 warning: 30 info : 20 debug : 10 具體格式: import logging # 配置好日志的處理, 預設就是GBK logging.basicConfig(filename='x1.txt', # 把日志資訊寫入的檔案名 format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', # 時間的格式 level=10) # 目前配置表示 10以上的分數會被寫入日件 # 向日志檔案寫入内容 logging.critical("今天嫂子沒有來") # 50, 幾乎是最高的 logging.error("昨天嫂子來了") # 40 平時使用最多的就是他 logging.warn("氣死我了") # 30 警告 logging.warning("還好吧") logging.info("提示") # 20 級 logging.debug("開發的時候把這個開着") # 10 logging.log(999, "寶寶今天有懵逼了") 建立一個依賴記錄檔的對象logger(依賴FileHandler) import logging # 建立一個記錄檔的對象logger(依賴FileHandler) file_handler = logging.FileHandler('l1.log', 'a', encoding='utf-8') # 建立檔案 file_handler.setFormatter(logging.Formatter( fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")) # 設定日志檔案的格式 logger1 = logging.Logger('騰訊qq', level=10) # 建立一個日志檔案處理對象 logger1.addHandler(file_handler) # 把檔案添加到日志 logger1.error("麻花藤明天請大家吃飯. 去不去?") # 再建立⼀個操作⽇志的對象logger(依賴FileHandler) file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8') file_handler2.setFormatter(logging.Formatter( fmt="%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s")) logger2 = logging.Logger('百度貼吧', level=logging.DEBUG) logger2.addHandler(file_handler2) logger2.error("我才不去呢. 我們在北京. 離你那麼遠") 舉例應用: import traceback class GenderException(Exception): pass class Person: def __init__(self, name, gender): self.name = name self.gender = gender logger1.info(f"這個人的名字是{self.name}, 這個人的性别是:{self.gender}") def xizao(self): print(f"{self.name}在洗澡") class ZaoTang: def nan(self, ren): if ren.gender == "男": ren.xizao() else: raise GenderException("我這裡要的是男人") def nv(self, ren): if ren.gender == "女": ren.xizao() else: raise GenderException("我這裡要的是女人") try: p1 = Person("趙亞磊", "男") p2 = Person("林志玲", "女") zaotang = ZaoTang() zaotang.nan(p2) zaotang.nv(p1) except GenderException: print("走錯屋裡了") logger1.error("走錯屋了.. ") logger1.error(traceback.format_exc()) # 把堆棧資訊記錄在日志檔案中
轉載于:https://www.cnblogs.com/yanghongtao/p/10169877.html