1. 程式人生 > >2018.12.21 今日所學

2018.12.21 今日所學

今日所學 :

 1 .類的約束  

2 .異常處理 try except raise

3. MD5加密

4. 日記處理(不要記,留一份,側重點再用)

 1 .類的約束  

  1) 寫一個父類,父類中的某個方法要丟擲一個異常 NotlmplemenredError(重點)

class Base: #建立一個父類約束子類
    def login(self):
       raise NotImplementedeError('系統報錯,請重新輸入') # 扔一個錯誤給子類,
約束他們按照指定的內容輸入 class yonghu(Base): # 建立普通使用者類 def login(self): print('使用者登入') class guanli(Base): #建立管理員登入類 def login(self): print('普通管理員登入') class chaoguan(Base): #建立超管類 def deng(self): print("超管登入") def denglu(content): #整合登入資訊功能 content.login() y=yonghu() #建立使用者 g=guanli() c=chaoguan() denglu.login(y) # 使用者登入 denglu.login(g) denglu.login(c) #此時超管使用者登入沒有login這一項,所以會報錯,此時應該建立一個約束  

  2) 抽象類和抽象方法

 抽象類和抽象方法 ->Java ,c#

抽象方法不需要給出具體的方法體,  

抽象發放內建寫一個pass就可以了

在一個類中如果有一個方法是抽象方法,那麼這個類一定是抽象類

抽象類中,如果有抽象方法,此時這個類不能建立物件

# 寫一個抽象方法: 匯入一個模組
from abc import ABCMeta,abstractmethod  #引入一個抽象模組
class animal(metaclass=ABCMeta):
    @abstractmethod 
    def chi(self): pass # 寫完上面的東西就是抽象類

    def he(self): # 在抽象類中也是可以有正常方法的
        print('動物會動')

class cat(animal):
    def chi(self): #和上面第一種方法性質一樣,都是約束子類要與父類中的抽象方法一致
        print('貓喜歡吃魚')

a=cat()
a.chi()
a.he() #抽象類中也可以有正常方法,同樣可以正常使用

使用抽象方法時 ,需要引入的模組

form abc import ABCMeta,abstractmethod class Base(metaclass=ABCMeta):   @abstractmethod   def fangfa(self):     pass  

 

2 .異常處理 try except raise

try : # 嘗試
    print('1/0')
    f=open('a1',mode='r')
except ZeroDivisionError: # 0的錯誤 
    print('零不能作分母')
except FileNotFoundError:  # 檔案錯誤
    print('檔案不存在')
else: 
    print('正常執行') #如果不報錯,就執行這裡
finally:
    print('不管報不報錯都執行這一步') #不管報不報錯都執行這裡

 

  

 

所有異常的根源都是Exception, 所有的異常的類都會預設繼承Exception 

try:
  程式碼
except 異常類:
  出了錯,如何處理異常
except 異常類:
  出了錯,如何處理異常
except 異常類:
  出了錯,如何處理異常
else:
    如果不出錯,走著一條
finally:
    不管出不出錯,都走這一條,都要執行  

raise 異常類('資訊')

如何自己定義異常

# 隨便寫一個類,只要他能繼承Exception,就可以自定義錯誤
class ztyException(Exception):
    pass  
class 類(Exception):  # 繼承 Exception是包含所有的錯誤
    pass

如何手動丟擲異常

#我們以數字相加為例
class NotintException(Exception): #自定義一個異常
    pass

def cul(a,b):
    if (type(a)==int or type(a)==folat) and (type(b)==int or type(b)==folat):
        return a+b
    else:
        raise NotintException('我沒辦法處理不是整數的型別') 

堆疊資訊 (錯誤資訊)

import traceback
traceback.format_exc()

3. MD5加密

import hashlib 
content=input('請輸入你要加密的內容:')
obj=hashlib.md5(b'bviuafakbvuaubuwaoi')  #加鹽
obj.update(content,encode('utf-8')) #將加鹽後的程式碼轉成utf-8
print(obj.hexdigest()) # 拿到密文 
 # 注 : 這裡的加的鹽加上之後是不能更改的,否則你的加密的內容也會改變 

  (import hashlib) 

 obj=hashlib.md5(b'鹽')

  obj.update(b'要加密的內容')

  print('obj.hexdigest()')

4. 日記處理(不要記,留一份,側重點再用)

日誌主要是記錄使用者操作的每一步步驟 : 什麼使用者什麼時間幹了什麼

等級 :

 critical : 50

 error : 40

 warning: 30

 info : 20

 debug : 10