天天看點

day 20 限制 異常處理 MD5

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