1. 程式人生 > >python之路--類的約束, 異常處理, MD5, 日誌處理

python之路--類的約束, 異常處理, MD5, 日誌處理

錯誤 如果 gen abc 後臺 相加 deb finall 百度貼吧

1. 類的約束

  1. 寫一個父類,父類中的某個方法要拋出一個異常 NotImplementedError

    

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 denglu(self): # 報錯, 上層程序員寫代碼沒有按照規範來 需要改成login
        print("後臺登錄")
# 整合這些個功能
def deng(obj):
    obj.login()

m = Member()
bw = BaWu()
ht = Houtai()

deng(m)
deng(bw)
deng(ht)

  2. 抽象類和抽象方法

  # 抽象方法不需要給出具體的方法體. 抽象方法內只寫一個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. 異常處理

  1. 異常處理. try except raise
try:
代碼
except 異常類:
除了錯, 如何處理異常
except 異常類:
除了錯, 如何處理異常
except 異常類:
除了錯, 如何處理異常
else:
當程序不出錯
finally:
不管出不出錯, 都要執行
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("哈哈哈哈哈哈哈哈啊哈")
      2. raise 異常類("信息")

如何自己定義異常
class 類(Exception):
pass
# 如何自己定義異常
# 隨便寫一個類. 這個類只要繼承了Exception 這個類就是一個異常類就可以作為raise對象
class CulException(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))

    3. 堆棧

import traceback # 用來查看堆棧信息
class GenderException(Exception):
    pass
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

def my_md5(s):
    obj = hashlib.md5(b"ghjhgfl")  # 加鹽 裏面的字母隨便給
    obj.update(s.encode("utf-8"))  # 把要加密的內容給md5
    return obj.hexdigest()

print(my_md5("我是吳彥祖")) # afd1938a01d0c5894d0781fb335249a3

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=40) # 當前配置表示 10以上的分數會被寫入日件

# 向日誌文件寫入內容
logging.critical("我是賭神,我是賭神") # 50, 幾乎是最高的
logging.error("我是周潤發") # 40 平時使用最多的就是他
logging.warn("氣死我了") # 30  警告
logging.warning("還好吧")
logging.info("提示") # 20 級
logging.debug("開發的時候把這個開著") # 10
logging.log(999, "寶寶今天有懵逼了") # level = 999


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("我才不去呢. 我們在北京. 離你那麽遠")

  

  

 

python之路--類的約束, 異常處理, MD5, 日誌處理