1. 程式人生 > >約束、自定義異常、加密、日誌處理

約束、自定義異常、加密、日誌處理

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)

    @abstractmethod
    
def 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 = b2erer3asdfwerxdf34sdfsdfs90

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

約束、自定義異常、加密、日誌處理