異常處理,約束,MD5加密日誌處理

 

 

程序運行過程當中產生的錯誤, 不正常
def chufa(a, b):
   try: # 嘗試執行xxx代碼
       ret = a/b # 若是這裏出現了錯誤. 異常. 系統內部會產生一個異常對象. 系統會把這個錯誤拋出.
拋給調用方 return ret except ZeroDivisionError as e: # 內部產生的全部異常都會被捕獲, 捕獲的異常對象會交給e print(e) print("出錯了. 0不能是除數") except FileNotFoundError as e: # 內部產生的全部異常都會被捕獲, 捕獲的異常對象會交給e print(e) print("出錯了. 0不能是除數") except StopIteration as e: # 內部產生的全部異常都會被捕獲, 捕獲的異常對象會交給e print(e) print("出錯了. 0不能是除數") except Exception as e: # 內部產生的全部異常都會被捕獲, 捕獲的異常對象會交給e print(e) print("出錯了. 0不能是除數")   finally:
    最後執行這個,文件造做
..... ret = chufa(10, 0) print(ret)

  

自定義異常:python

import traceback

class GenderError(Exception):#拋出異常
    pass

class Person:
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

def nan_gu_ke_xi_zao(per):
    if per.gender != "男":
        raise GenderError("這裏是劉偉的男澡堂子. ")
    else:
        pass
p1 = Person("alex", "不詳")
# nan_gu_ke_xi_zao(p1)
p2 = Person("wusir", "不詳")
try:#處理異常
    nan_gu_ke_xi_zao(p2)
except GenderError as g:
    print(g)
    val = traceback.format_exc() # 獲取錯誤堆棧
    print(val)

  

 

約束:app

class Base:
    def login(self):
        raise NotImplementedError("沒有實現login方法") # 專業的寫法   鬧特A噗安門特
    def kantie(self):
        raise NotImplementedError("沒有實現看帖功能")
# 張三
class Normal(Base):
    def login(self):
        print("普通人登錄")

# 李四
class Member(Base):
    def denglu(self):
        print("吧務登錄")

# 王五
class Admin(Base):
    def login(self):
        print("管理員登錄")

def login(obj):
    print("產生驗證碼")
    obj.login() # 標準在這裏.  必須由login
    print("進入主頁")

# 場景
n = Normal()
m = Member()
a = Admin()
login(n)
login(m)
login(a)
重寫:子類對父類提供的方法不滿意。 從新去定義這個方法

  

 
from abc import ABCMeta, abstractmethod

class Animal(metaclass=ABCMeta): # 在父類中寫出metaclass= xxx  抽象類, 類中存在抽象方法,
類必定是抽象類 @abstractmethod # 抽象方法 def chi(self): # 抽象的概念. pass def haha(self): print("娃哈哈") class Cat(Animal): # 子類必須實現父類中的抽象方法. def chi(self): # 具體的實現 print("貓愛吃魚") Cat()

  

from abc import ABCMeta,abstractmethod

class Base(metaclass=ABCMeta):
    @abstractmethod
    def login(self):pass

# 張三
class Normal(Base):
    def login(self):
        print("普通人登錄")

# 李四
class Member(Base):
    def login(self):
        print("吧務登錄")

# 王五
class Admin(Base):
    def login(self):
        print("管理員登錄")

def login(obj):
    print("產生驗證碼")
    obj.login() # 標準在這裏.  必須由login
    print("進入主頁")

# 場景
n = Normal()
m = Member()
a = Admin()
login(n)
login(m)
login(a)

  

MD5加密:   MD5加密不可逆ide

update   啊破DA特
hashlib
import hashlib

# 1. 建立一個MD5對象
obj = hashlib.md5(b"flkjsdalkfjklasdjfklasjkflasdjklfasdjflkadsj") # 加鹽

# 2. 把要加密的內容給md5
obj.update("alex".encode("utf-8")) # 必須是字節

# 3. 獲取密文
val = obj.hexdigest()   # 534b44a19bf18d20b71ecc4eb77c572f aa7aa5ec13222b27f76a094207c5ac75
print(val)

  函數函數

def my_md5(val):
    obj = hashlib.md5(b"flkjsdalkfjklasdjfklasjkflasdjklfasdjflkadsj")
    obj.update(val.encode("utf-8"))
    val = obj.hexdigest()
    return val

  

註冊加密

註冊的時候. 用md5進行加密. 存儲的是加密後的密文
username = input("請輸入用戶名")
password = input("請輸入密碼")
# cun = my_md5(password)
# print(cun) # alex 26adff81aa6778d26999b95ddc0e50b2
if username == "alex" and my_md5(password) == "26adff81aa6778d26999b95ddc0e50b2":
    print("登陸成功")
else:
    print("登陸失敗")

  

 

日誌處理:spa

進入這個模塊:  debug

import logging
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
日誌處理等級
logging.critical("我是critical")
logging.error("我是error")
logging.warning("我是警告")
logging.info("我是基本信息")
logging.debug("我是調試")
logging.log(2, "我是自定義")

  

logging.basicConfig(filename='app.log',
                    format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S',
                    level=40)    # level 設置級別. 當你的信息的級別>=level的時候纔會寫入日誌文件, 默認30

  

如何用他調試

import traceback   堆棧

for i in range(20):
    try:
        if i % 3 == 0:
            raise FileNotFoundError("我是FileNotFountException")
        elif i % 3 == 1:
            raise StopIteration()
        elif i % 3 == 2:
            raise KeyError()

    except FileNotFoundError as e:
        val = traceback.format_exc()
        logging.error(val)
    except StopIteration as e:
        val = traceback.format_exc()
        logging.error(val)
    except KeyError as e:
        val = traceback.format_exc()
        logging.error(val)
    except Exception as e:
        val = traceback.format_exc()
        logging.error(val)

  

 

多文件日誌

 

# 多文件日誌處理
# 建立⼀個操做⽇志的對象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('A', level=40)
logger1.addHandler(file_handler)
# 記錄日誌
logger1.error('我是A系統')



# 再建立⼀個操做⽇志的對象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('B', level=40)
logger2.addHandler(file_handler2)
# 記錄日誌
logger2.error('我是B系統')
相關文章
相關標籤/搜索