一內容回顧
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只是幫助你 簡化操作檔案的步驟\按照你的要求規劃日誌等級\幫助你規範格式
importlogging
#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的名字,並且指向空間中對應的變數
#注意 :
#在寫**的過程中,不要取和匯入的變數名相同的名字,否則會導致匯入的名字不可用
#模組中的變數永遠是獨立的,在內部是獨立的使用的
day33 稀疏陣列
當乙個陣列中大部分元素為0,或者為同乙個值的陣列時,可以使用稀疏陣列來儲存該陣列。稀疏陣列的處理方法是 1 記錄陣列一共有 幾行幾列,有多少個不同的值 2 把具有不同值的元素的行列及值記錄在乙個小規模的陣列中,從而縮小程式的規模 1.遍歷原始的二維陣列,得到有效資料的個數sum 2.根據sum就可以...
day33 Pyhton 常用模組03
一.正規表示式 1.元字元 匹配除換行符以外的任意字元 w 匹配字母或數字或下劃線 s 匹配任意的空白符 d 匹配數字 n 匹配乙個換行符 t 匹配乙個製表符 b 匹配乙個單詞的結尾 匹配字串的開始 匹配字串的結尾 w 匹配非字母或數字或下劃線 d 匹配非數字 s 匹配非空白符 a b 匹配字元a或...
day33 python之多執行緒
1.多執行緒例項 import threading import time import threading import time class mythread threading.thread def init self,num threading.thread.init self self.n...