程序運行過程當中產生的錯誤, 不正常 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系統')