異常和模塊
一.異常
1.異常
運(yùn)行程序的時(shí)候程序報(bào)錯(cuò)秽之,又叫程序出現(xiàn)異常
當(dāng)執(zhí)行程序的時(shí)候如果出現(xiàn)異常,出現(xiàn)異常的線程會(huì)直接崩潰,不再執(zhí)行線程后面的代碼玄货。
2.異常捕獲
1)語(yǔ)法一:try - except可以捕獲除結(jié)構(gòu)異常以外的任何異常
try:
代碼塊1
except:
代碼塊2
2)語(yǔ)法二:捕獲指定異常
try:
代碼塊1
except 異常類(lèi)型:
代碼塊2
執(zhí)行過(guò)程:先執(zhí)行代碼塊1,如果執(zhí)行代碼塊1的時(shí)候出現(xiàn)異常悼泌,檢查異常類(lèi)型和except后面的異常類(lèi)型是否一致
如果一致松捉,程序不崩潰,直接執(zhí)行代碼塊2
如果不一致馆里,代碼直接崩潰
如果執(zhí)行代碼塊1的時(shí)候沒(méi)有出現(xiàn)異常惩坑,不執(zhí)行代碼塊2,接著往后執(zhí)行
3)語(yǔ)法三:同時(shí)捕獲多個(gè)異常
try:
代碼塊1
except(異常類(lèi)型1也拜, 異常類(lèi)型2):
代碼塊2
4)語(yǔ)法四:
try:
代碼塊1
except 異常類(lèi)型1:
代碼塊11
except 異常類(lèi)型2:
代碼塊22
說(shuō)明:
try,except:關(guān)鍵字以舒,固定寫(xiě)法
代碼塊1:和try保持一個(gè)縮進(jìn)的一條或者多條語(yǔ)句
需要捕獲異常的代碼
代碼塊2:和except保持一個(gè)縮進(jìn)的一條或者多條語(yǔ)句
異常發(fā)生后會(huì)執(zhí)行的代碼
執(zhí)行過(guò)程:先執(zhí)行代碼塊1,如果在執(zhí)行代碼塊1的時(shí)候出現(xiàn)了異常慢哈,程序不崩潰蔓钟,直接執(zhí)行代碼塊2,
然后再執(zhí)行后面的其它語(yǔ)句(try-except后面的語(yǔ)句)卵贱;如果在執(zhí)行代碼塊1的時(shí)候沒(méi)有出現(xiàn)異常滥沫,代碼塊2不會(huì)執(zhí)行,直接執(zhí)行后面的其它語(yǔ)句键俱。
3.finally關(guān)鍵字
前面四種捕獲異常的結(jié)構(gòu)的最后面都可以添加一個(gè)finally兰绣,finally下的語(yǔ)句一定會(huì)執(zhí)行
4.拋出異常
主動(dòng)讓程序崩潰
語(yǔ)法:
raise 異常類(lèi)型
說(shuō)明:異常類(lèi)型必須是Exception的子類(lèi)
5.try ....except...else 語(yǔ)句
當(dāng)沒(méi)有異常發(fā)生時(shí),else中的語(yǔ)句將會(huì)被執(zhí)行编振。
二.模塊的使用
1.什么是模塊
python中一個(gè)py文件就是一個(gè)模塊
2.怎么在一個(gè)模塊中使用另一個(gè)模塊中的內(nèi)容
如果要在一個(gè)模塊中去使用另外一個(gè)模塊的內(nèi)容缀辩,必須先導(dǎo)入模塊
1)語(yǔ)法:
a.import 模塊名 - 導(dǎo)入指定模塊,導(dǎo)入后可以在當(dāng)前模塊中使用模塊中的所有的全局變量
以'模塊名.全局變量名'的方式去使用
b.from 模塊名 import 變量名1踪央,變量名2臀玄,... 導(dǎo)入指定模塊,導(dǎo)入后只能使用import后面指定的變量
導(dǎo)入后指定的全局變量在當(dāng)前模塊中直接使用,不用在前面加'模塊名.'
c.from 模塊名 import * - 導(dǎo)入指定模塊畅蹂,導(dǎo)入后可以在當(dāng)前模塊中使用模塊中所有的全局變量健无;
導(dǎo)入后變量直接使用,不用加'模塊名'
d.import 模塊名 as 新模塊名 - 導(dǎo)入后采用新模塊名去使用模塊中的內(nèi)容
3.導(dǎo)入模塊的原理
當(dāng)執(zhí)行導(dǎo)入模塊的代碼的時(shí)候液斜,會(huì)直接執(zhí)行被導(dǎo)入的模塊中所有的代碼累贤。
1)重復(fù)導(dǎo)入問(wèn)題
import在導(dǎo)入模塊的時(shí)候,會(huì)自動(dòng)檢測(cè)這個(gè)模塊之前是否已經(jīng)導(dǎo)入過(guò),來(lái)避免一個(gè)模塊的重復(fù)導(dǎo)入
2)阻止模塊中的內(nèi)容被其他模塊導(dǎo)入
將不需要被其他模塊執(zhí)行的語(yǔ)句寫(xiě)入'if name == 'main':'對(duì)應(yīng)的if語(yǔ)句中
三.包的使用
1.什么是包
一個(gè)帶有init.py文件的文件夾就叫包
1)直接導(dǎo)入包 - 只執(zhí)行init.py文件
import animal
2)從包中導(dǎo)入指定的模塊
from animal import bird, dog
print(bird.b, dog.d)
3)從包里的模塊導(dǎo)入變量
from animal,cat import c
四.系統(tǒng)常用模塊
import time
import os
import sys
print(time.ctime())
print(sys.version)
print(sys.exit())
hashlib是python3.x提供的一個(gè)hash加密的模塊:支持目前一些主流一些加密算法:sha256少漆、md5等
1.hash加密特點(diǎn):
a.相等的數(shù)據(jù)采用同一個(gè)加密算法臼膏,保證加密結(jié)果一樣
b.通過(guò)加密后的數(shù)據(jù)不能反向獲取原數(shù)據(jù)
c.采用同樣的加密算法,不管原數(shù)據(jù)的大小是多少,加密后的數(shù)據(jù)的長(zhǎng)度是一樣的
2.加密步驟
pw = ''
1)根據(jù)加密算法創(chuàng)建hash對(duì)象
import hashlib
hash = hashlib.md5()
2)對(duì)數(shù)據(jù)進(jìn)行加密
hash對(duì)象.updata(加密數(shù)據(jù)) - 加密數(shù)據(jù)必須是二進(jìn)制數(shù)據(jù)
字符串轉(zhuǎn)二進(jìn)制:a.字符串.encode(encoding = 'utf-8') ? ? b. bytes(字符串, encoding = 'utf-8')
hash.update(pw.encode())
3)根據(jù)hash對(duì)象獲取加密后的數(shù)據(jù)(字符串類(lèi)型)
result = hash.hexdigest()
print(result)