1.異常捕獲
當(dāng)程序發(fā)生異常的時候,默認情況會使程序崩潰,不能接著往后面繼續(xù)執(zhí)行;捕獲異常就是讓程序發(fā)生異常的時候不會崩潰,能夠繼續(xù)執(zhí)行程序。一般在知道代碼存在異常的時候,但又不能通過修改代碼去避免,這個時候就可以通過異常捕獲去處理異常。
2.捕獲異常的語法
1)語法一:捕獲所有的異常
try:
代碼段1
except:
代碼段2
finally:
代碼段f
說明:try;except關(guān)鍵字,固定寫法;代碼段1需要捕獲異常的一條語句或多條語句,代碼段2出現(xiàn)異常后會執(zhí)行的一條語句或者多條語句。finally:關(guān)鍵字,捕獲異常的結(jié)構(gòu)后面的最后都可以添加一個finally,finally后面的代碼段一定會被執(zhí)行。
執(zhí)行過程:先執(zhí)行代碼段1,如果執(zhí)行代碼1的時候出現(xiàn)異常,程序不會崩潰會直接執(zhí)行代碼段2,如果沒有出現(xiàn)異常,不會執(zhí)行代碼段2,但會執(zhí)行finally后面的代碼段。
2)語法二:捕獲指定異常
try:
代碼段1
except 異常類型:
代碼段2
finally:
代碼段3
說明:先執(zhí)行代碼1,如果執(zhí)行代碼塊1的時候發(fā)生異常,檢查出現(xiàn)的異常是否和except后面的異常類型相同,如果相同程序不奔潰,執(zhí)行代碼段2,否則程序直接崩潰,執(zhí)行finally后面的代碼段。
3)語法三:同時捕獲多個異常
try:
代碼段1
except (異常類型1,異常類型2,....):
代碼段2
finally:
代碼段3
4)語法四:同時捕獲多個指定異常:
try:
代碼段1
except 異常類型1:
代碼段11
ecxept 異常類型2:
代碼段22
finally:
代碼段3
3.拋出異常:主動讓程序奔潰
語法:raise 異常類型
說明:異常類型必須是Exceptionde子類
個人總結(jié):程序在運行過程中會遇到異常,當(dāng)我們知道異常類型的時候,可以直接把異常類型放在except語句后面,這樣當(dāng)捕獲到一致的異常的時候,則保持運行程序不會崩潰,我們可以先使用raise 將異常拋出
class AgeError(Exception):
def __str__(self):
return '年齡值范圍不在0~150'
age = 1000
if not 0 <= age <= 150:
raise AgeError
控制臺顯示raise 拋出的異常
Traceback (most recent call last):
File "C:/Users/hxj/Desktop/作業(yè)&代碼/day13-異常和模塊/03-異常.py", line 144, in <module>
raise AgeError
__main__.AgeError: 年齡值范圍不在0~150
class AgeError(Exception):
def __str__(self):
return '年齡值范圍不在0~150'
age = 1000
if not 0 <= age <= 150:
raise FileNotFoundError
控制臺顯示raise拋出的異常:
Traceback (most recent call last):
File "C:/Users/hxj/Desktop/作業(yè)&代碼/day13-異常和模塊/03-異常.py", line 142, in <module>
raise FileNotFoundError
FileNotFoundError
4.模塊的使用
什么是模塊:python中一個py文件就是一個模塊。
怎么從一個模塊中使用另一個模塊中的內(nèi)容:
要在一個模塊中使用另一個模塊,就必須先導(dǎo)入該模塊,
1)語法:
a.import 模塊名
導(dǎo)入指定模塊后,可以在當(dāng)前模塊中使用導(dǎo)入模塊的所有全局變量,使用方式“模塊名.全局變量名”
import test
print(test.test_a, test.test_str1)
test.func1()
b.from 模塊名 import 變量名1,變量名2,...
導(dǎo)入后,可以使用import后面的所有變量,導(dǎo)入的全局變量直接在模塊中使用,使用時不用在前面添加“模塊名”。
from test import test_a, func1
print(test_a)
c.from 模塊名 import *
導(dǎo)入模塊中的所有全局變量,使用時不需要添加"模塊名"。
from test import *
print(test_a, test_str1)
func1()
d.import 模塊名 as 新模塊名
導(dǎo)入模塊后,使用時“新模塊名.變量名”
模塊重命名:
import fileManager as FM
FM.write_file(900)
FM.json_read()
e.from 模塊名 import 變量名1 as 新變量名1, 變量名2 as 新變量名2...
導(dǎo)入以后,使用時“新變量名”即可,不用加模塊名
from test import a as ta
a = 100
print(a, ta)
2)導(dǎo)入模塊的原理
當(dāng)執(zhí)行導(dǎo)入模塊的代碼的時候,會直接執(zhí)行被導(dǎo)入的模塊中的所有代碼
1)重復(fù)導(dǎo)入的問題
import 在導(dǎo)入模塊的時候會自動檢測這個模塊之前是否已經(jīng)導(dǎo)入過,來避免一個模塊重復(fù)導(dǎo)入
2)阻止模塊中的內(nèi)容被其他模塊導(dǎo)入
將不需要被其他模塊執(zhí)行的語句寫入“if name=='main':"對應(yīng)的if語句中
1.包的使用
什么是包:一個帶有init.py的文件就叫做包。
包就是在工程里面創(chuàng)建的一個Python Package,里面存有自己編輯的python file,當(dāng)我們在其他py文件中使用到包中的函數(shù)的或者變量的時候,需要提前導(dǎo)入該包,導(dǎo)入的方式有以下幾種:
1)直接導(dǎo)入包
直接導(dǎo)入包的時候,當(dāng)前程序只執(zhí)行被導(dǎo)入包的init.py文件里面的程序。
2)從包中導(dǎo)入指定的模塊
語法:from 包名 import py1的文件名 py2的文件
py文件根據(jù)自己需要用的到導(dǎo)入進去
3)從包中的模塊導(dǎo)入變量
語法:from 包名.py文件名 import 變量名
例如: from animal.cat import c
print(c)
加密(hashlib)
hashlib是python3.x提供的一個hash加密的模塊;支持目前主流的一些加密運算:sha256、md5等。
1.加密特點
1)相等的數(shù)據(jù)采用同一個加密算法,保證加密的結(jié)果一樣
2)通過加密的數(shù)據(jù)不能反向獲取原數(shù)據(jù)
3)采用同樣的加密算法,不管原來數(shù)據(jù)的大小是多少,加密后的數(shù)據(jù)長度是一樣的
2.加密的步驟
1)根據(jù)加密的算法創(chuàng)建hash對象
hash = hashlib.md5()
2)對數(shù)據(jù)進行加密
hash.update(加密數(shù)據(jù)) -- 加密的數(shù)據(jù)必須是二進制數(shù)據(jù)
字符串轉(zhuǎn)二進制:
a. 字符串.encode(encoding='utf-8')
b. bytes(字符串,encoding='utf-8')
例如:hash.update('你好!'.encode())
3)個悲劇hash對象獲取加密后的數(shù)據(jù)(字符串類型)
result = hash.hexdigest()
print(result)
#完整的示例
import hashlib
pw = input('輸入密碼:')
hash = hashlib.md5()
hash.update(pw.encode())
result = hash.hexdigest()
print(result)