異常
1.什么是異常
運(yùn)行程序的時候程序報錯,又叫程序出現(xiàn)異常
當(dāng)執(zhí)行程序的時候,如果出現(xiàn)異常,出現(xiàn)異常的線程會直接崩潰,不再執(zhí)行線程中后面其他的代碼
2.異常捕獲
-
1)語法一:
try - except能夠捕獲任何異常
try:
代碼塊1
except:
代碼塊2說明:
try/except - 關(guān)鍵字,固定寫法
代碼塊1 - 和try保持一個縮進(jìn)的一條或者多條語句
(需要捕獲異常的代碼塊)
代碼塊2 - 和except保持一個縮進(jìn)的一條或者多條語句
(異常發(fā)生后會執(zhí)行的代碼)執(zhí)行過程:
先執(zhí)行代碼塊1,如果在執(zhí)行代碼塊1的時候出現(xiàn)了異常,程序不崩潰,直接執(zhí)行代碼塊2,然后再執(zhí)行其它語句淘正;如果在執(zhí)行代碼塊1的時候沒有出現(xiàn)異常,代碼塊2不會執(zhí)行,直接執(zhí)行其它語句
try:
age = int('a')
except:
print('出現(xiàn)異常,年齡只能是數(shù)字')
print('最后')
-
2)語法二:
try - except 異常類型: 捕獲指定異常
try:
代碼塊1
except 異常類型:
代碼塊2- 執(zhí)行過程:
先執(zhí)行代碼塊1,如果在執(zhí)行代碼塊1的時候出現(xiàn)了異常,檢查異常類型和except后面的異常類型是否一致,
如果一致程序不崩潰,直接執(zhí)行代碼塊2,然后再執(zhí)行其它語句
如果不一致,程序直接崩潰
如果在執(zhí)行代碼塊1的時候沒有出現(xiàn)異常,代碼塊2不會執(zhí)行,直接執(zhí)行其它語句
- 執(zhí)行過程:
try:
# print('a'+23)
age = int('a')
except ValueError:
print('出現(xiàn)異常,年齡只能是數(shù)字')
print('最后')
3)語法三:
try - except (異常類型1,異常類型2,...): 同時捕獲指定的多種異常
try:
代碼塊1
except (異常類型1,異常類型2,...):
代碼塊24)語法四:
try - except (異常類型1,異常類型2,...): 同時捕獲指定的多種異常
try:
代碼塊1
except 異常類型1:
代碼塊11
except 異常類型2:
代碼塊22
3.finally關(guān)鍵字
前面四種捕獲異常結(jié)構(gòu)的最后面都可以添加一個finally
- 例:
try:
代碼塊1
except:
代碼塊2
finally:
代碼塊3
其它語句
- finally中代碼塊一定會執(zhí)行,和其它語句的區(qū)別就在于如果上面程序崩潰,其它語句不會執(zhí)行,但是finally中的語句會執(zhí)行
4.拋出異常
主動讓程序崩潰
語法:
raise 異常類型:說明:
以指定異常類型崩潰,異常類型必須是exception的子類
模塊
1.什么是模塊
python中一個py文件就是一個模塊
2.怎么在一個模塊中使用另外一個模塊中的內(nèi)容
如果要在一個模塊中使用另外一個模塊中的內(nèi)容,必須先導(dǎo)入模塊
1)語法:
import 模塊名(就是py文件的名字) - 導(dǎo)入指定模塊,導(dǎo)入后可以在當(dāng)前模塊中使用模塊中所有的全局變量结闸, 以'模塊名.全局變量名'的方式去使用
form 模塊名 import 變量名1,變量名2,... - 導(dǎo)入指定模塊,導(dǎo)入后只能使用import后面指定的變量,導(dǎo)入后指定的全局變量在當(dāng)前模塊中直接使用,不用在前面加'模塊名.'
form 模塊名 import * - 導(dǎo)入指定模塊,導(dǎo)入后指定模塊中所有的全局變量都可以使用,不用在前面加'模塊名.'
重命名:
import 模塊名 as 新模塊名 - 導(dǎo)入后采用新模塊名去使用模塊中的內(nèi)容
from 模塊名 import 變量名1,變量名2, as 新變量名2
3.載入模塊的原理
當(dāng)執(zhí)行導(dǎo)入模塊的代碼的時候,會直接執(zhí)行被導(dǎo)入的模塊中所有的代碼
1)重復(fù)導(dǎo)入
import在導(dǎo)入模塊的時候會自動檢查當(dāng)前模塊是否已經(jīng)導(dǎo)入,如果已經(jīng)導(dǎo)入,不會再導(dǎo);所以重復(fù)導(dǎo)入不會有問題,因為根本不會導(dǎo)
2)阻止模塊中的內(nèi)容被其它模塊導(dǎo)入
將不需要被其它模塊執(zhí)行的語句寫入if name == 'main':對應(yīng)的if語句中
if name == 'main':
外部導(dǎo)入不會執(zhí)行的部分,但是不影響自身的使用
包
1.什么是包
一個帶有init.py文件的文件夾就叫包,
1)直接導(dǎo)入包
import 包名 - 實際上是執(zhí)行了包中的init,所以在init中要用form import導(dǎo)入包中其它模塊
2)從包中導(dǎo)入指定的模塊
from 包名 import 模塊名1,模塊名2,...
3)從包中指定模塊導(dǎo)入指定變量
form 包名.模塊名 import 變量
hashlib
1.什么是hashlib
- hashlib是python3.x提供的一個hash加密的模塊:支持目前主流一些加密算法:sha256辩诞、md5等
hash加密特點:
a.相等的數(shù)據(jù)采用同一個加密算法坎弯,保證加密結(jié)果一樣
b.通過加密后的數(shù)據(jù)不能反向獲取原數(shù)據(jù)
c.采用同樣的加密算法,不管原數(shù)據(jù)的大小是多少,加密后的數(shù)據(jù)的長度是一樣的
2.加密步驟
1)根據(jù)加密算法創(chuàng)建hash對象
hash=hashlib.sha256()
2)對數(shù)據(jù)進(jìn)行加密
- hash對象.update(加密數(shù)據(jù)) - 加密數(shù)據(jù)必須是二進(jìn)制數(shù)據(jù)
- 字符串轉(zhuǎn)二進(jìn)制: a.字符串.encode)(encoding='utf-8') b. bytes(字符串,encoding='utf-8')
pw=input('請輸入密碼:')
hash.update('你好!'.encode()) # 二級加密,還可以多添加幾個多層加密
hash.update(pw.encode())
3)根據(jù)hash對象獲取加密后的數(shù)據(jù)(字符串類型)
result = hash.hexdigest()
print(result)