1. 程式人生 > >day33 Pyhton logging 模組和包

day33 Pyhton logging 模組和包

一內容回顧

  try/except

  try/except/else

  try/finally

  try/except

  try/except/finally

  try/except/else/finally

報錯的時候

  1檢查程式邏輯是不是有問題

  2.邏輯沒有問題,但是就是會報錯

    找到具體錯誤的那一行程式碼

    在這一行程式碼上加上try,再根據錯誤型別進行處理

主動拋異常

  raise 異常型別

自定義異常

  繼承BaseException

  __str__方法的返回值就是這個異常丟擲之後的異常內容

斷言 assert語法,不滿足條件就報錯

 

hasblib模組

摘要模組:各種各樣的摘要演算法

md5/sha1

兩件事:

  1.密碼的密文儲存: 各種演算法 動態加鹽

  2.檔案的一致性校驗

md5_obj =hashlib.md5(bytes 鹽)# 建立一個新的md5值計算的物件

md5_obj.update(bytes) #每一次uodate,相當於在原來的字串後面加上新的字串

md5_obj.hexdigest() #只是獲取最終結果

二今日內容

logging #日誌模組

  給使用者看 : 銀行流水\購物記錄

  哪一個管理員什麼時候登陸 刪除了一個學生

給程式設計師看的 :

   計算器 'asjkdghlghljgjl;;' 計算錯誤了

   錄下每一個使用者讓你計算的表示式

   記錄下每一個計算的步驟是怎麼錯的

# f = open()
# f.write('年月日時分秒 所在的檔案 錯誤的級別 asjhkhkaghkldgh')
# f.close()
# 格式不好看 logging模組 這些格式你就不需要反覆寫
# 每一次都需要自己開啟檔案\關閉檔案  logging就不需要了
# 有一些資訊 能夠控制它在某一寫特定的時刻就打印出來
# logging模組不能自動幫助你生成日誌,仍然是你自己寫你想寫的內容
# logging只是幫助你 簡化操作檔案的步驟\按照你的要求規劃日誌等級\幫助你規範格式
import logging
# logging.basicConfig(level=logging.DEBUG)
# logging.debug('debug message')    # 最細節的  計算機計算的那些小過程
# logging.info('info message')      # 普通訊息  記錄每個使用者的操作
# logging.warning('warning message')# 警告資訊  你覺得可能會影響到你程式的安全\正確率的內容
# logging.error('error message')    # 錯誤資訊  直接影響你程式的健康了
# logging.critical('critical message')#批判的 把整個userinfo檔案刪掉了
# 預設顯示warning以上的日誌
logging.basicConfig(level=logging.DEBUG,
                     format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                     datefmt='%a, %d %b %Y %H:%M:%S',
                     filename = 'test.log',
                     filemode = 'a'
# 1.作業系統的編碼可能會出現亂碼問題 
# 2.不支援同時向檔案和螢幕輸出
import logging
#logger物件的方式: 靈活性 可擴充套件性
logger = logging.getLogger() #建立一個logger物件
logger.setLevel(logging.DEBUG)
#建立一個檔案操作符 來準備操作日誌向檔案中寫這件事
fh = logging.FileHandler('mylog.log',encoding='utf-8')
fh2 = logging.FileHandler('mylog2.log',encoding='utf-8')
#建立一個螢幕操作符,來準備操作日誌向螢幕中寫這件事
sh = logging.StreamHandler()
#建立一個輸出格式
formatter = logging.Formatter('%(asctime)s%(filename)s[line:%(lineno)d]%(levelname)s %(message)s')
formatter2 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#組合
#輸出格式和檔案操作符\螢幕操作符綁在一起
fh.setFormatter(formatter)
sh.setFormatter(formatter2)
sh.setLevel(logging.ERROR)
# logger物件分別和檔案操作符\螢幕操作符綁在一起
logger.addHandler(fh)
logger.addHandler(fh2)
logger.addHandler(sh)

#才開始能夠使用logger來記錄日誌
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')

三.模組

# mymodule就是模組
# import mymodule mymodule就是一個變量了
# 匯入一個模組相當於什麼???
    # 執行了這個模組對應的檔案
    # 並且在執行的過程中 所有的函式名\變數名\類名都會繫結在這個模組中
# 1.開闢了一塊屬於這個模組的空間
# 2.讓這個匯入的名字mymodule指向這個空間
# 3.執行模組中的程式碼,把所有的名字都儲存在這個空間中
# 模組會被重複匯入麼?不會
# import mymodule as m
# print(m.name)
# m.read1()
# as語句的用法
    # 1.名字很長的時候
    # 2.相同功能名字不同的幾個模組的相容問題
# from mymodule import name,read2
# from import 這個語法一旦執行,相當於什麼?
    # from import 仍然相當於執行整個檔案
# 在from import 的過程中發生了什麼事情?
    # 1.建立一個空間
    # 2.執行模組的程式碼 並且把每一個變數都放在空間中
    # 3.建立變數名 = import的名字,並且指向空間中對應的變數
# 注意 :
    # 在寫程式碼的過程中,不要取和匯入的變數名相同的名字,否則會導致匯入的名字不可用
    #模組中的變數永遠是獨立的,在內部是獨立的使用的