約束、自定義異常、加密、日誌處理
阿新 • • 發佈:2018-08-31
update () return 知識點 排查 file salt mat ror
一、約束
BaseMessage類用於約束,約束其派生類:保證派生類中必須編寫方法,不然執行就可能報錯。
class BaseMessage(object): def send(self,x1): """ 必須繼承BaseMessage,然後其中必須編寫send方法。用於完成具體業務邏輯。 """ raise NotImplementedError(".send() 必須被重寫.") class Email(BaseMessage): def send(self,x1): """ 必須繼承BaseMessage,然後其中必須編寫send方法。用於完成具體業務邏輯。""" pass obj = Email() obj.send(1)
1.什麽是接口以及作用:
接口是一種數據類型,主要用於約束派生類中必須實現的指定方法
python中不存在接口,java、C#中存在
2.python中使用什麽來約束:
抽象類+抽象方法(編寫上麻煩,不推薦使用)
from abc import ABCMeta,abstractmethod class Base(metaclass=ABCMeta): # 抽象類 def f1(self): print(123) @abstractmethoddef f2(self): # 抽象方法 pass class Foo(Base): def f2(self): print(666) obj = Foo() obj.f1()
人為主動拋出異常
3.約束時,拋出的異常是否可以使用其他:
不專業:raise Exception(".send() 必須被重寫.") 專業:raise NotImplementedError(".send() 必須被重寫.")
二、自定義異常
class MyException(Exception): #必須繼承Exception def__init__(self, code, msg): self.code = code self.msg = msg try: # 知識點:主動拋出異常 raise MyException(1000, ‘操作異常‘) except KeyError as obj: print(obj, 1111) except MyException as obj: # 知識點:捕獲異常 print(obj, 2222) except Exception as obj: print(obj, 3333)
三、加密(hashlib模塊)
關鍵字:撞庫、加鹽
import hashlib SALT = b‘2erer3asdfwerxdf34sdfsdfs90‘ def md5(pwd): # 實例化對象 obj = hashlib.md5(SALT) # 寫入要加密的字節 obj.update(pwd.encode(‘utf-8‘)) # 獲取密文 return obj.hexdigest() # 21232f297a57a5a743894a0e4a801fc3 # 66fbdc0f98f68d69cd458b0cee975fe3 # c5395258d82599e5f1bec3be1e4dea4a user = input("請輸入用戶名:") pwd = input("請輸入密碼:") if user == ‘oldboy‘ and md5(pwd) == ‘c5395258d82599e5f1bec3be1e4dea4a‘: print(‘登錄成功‘) else: print(‘登錄失敗‘)View Code
四、日誌
日誌主要是給開發人員看的,用於排查錯誤
import logging logger = logging.basicConfig(filename="zhangqing", format="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S", level=30) logging.debug(‘x1‘) # 10 logging.info(‘x2‘) # 20 logging.warning(‘x3‘) # 30 logging.error(‘x4‘) # 40 logging.critical(‘x5‘) # 50 logging.log(10,‘x6‘) import traceback def func(): try: a = a +1 except Exception as e: # 獲取當前錯誤的堆棧信息 msg = traceback.format_exc() logging.error(msg) func()View Code
自定義日誌
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(‘s1‘, level=logging.ERROR) logger1.addHandler(file_handler) logger1.error(‘123123123‘) # 在創建一個操作日誌的對象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(‘s2‘, level=logging.ERROR) logger2.addHandler(file_handler2) logger2.error(‘666‘)View Code
約束、自定義異常、加密、日誌處理