一.異常
1.異常
運行程序的時候程序報錯, 又叫程序出現異常
當執行程序的時候如果出現異常, 出現異常的線程會直接崩潰, 不再執行線程中后面其他的代碼
list1 = [1, 2, 3]
print(list1[10]) # IndexError: list index out of range
2.異常捕獲
1)語法一: 可以捕獲任何異常(代碼格式除外)
try:
代碼塊1
except:
代碼塊2
finally:
代碼塊3
其他語句
說明:
try, except - 關鍵字, 固定寫法
代碼塊1 - 和try保持一個縮進的一條或者多條語句(需要捕獲異常的代碼)
代碼塊2 - 和except保持一個縮進的一條或者多條語句(異常發生后會執行的代碼)
執行過程: 先執行代碼塊1, 如果在執行代碼塊1的時候出現了異常, 程序不崩潰, 直接執行代碼塊2, 然后執行其他語句; 如果在執行代碼塊1的時候沒出現異常, 代碼塊2不會執行, 直接執行后面的其他語句
list1 = [1, 2, 3]
try:
print(list1[10])
except:
print('IndexError!')
2)語法二: 捕獲指定異常
try:
代碼塊1
except 異常類型:
代碼塊2
finally:
代碼塊3
**執行過程: **
先執行代碼塊1, 如果執行代碼塊1的時候出現異常, 檢查異常類型和except后面的異常類型是否一致, 如果一致, 程序不崩潰, 直接執行代碼塊2, 如果不一致, 程序直接崩潰;
如果執行代碼塊1的時候沒有出現異常, 不執行代碼塊2, 接著往后執行
try:
print({'a': 1}['b'])
print('++++++')
print([1, 2, 3, 4][10])
print('===========')
except IndexError:
print('IndexError!')
except KeyError:
print('KeyError!')
3)語法三: 同時捕獲指定多個異常
try:
代碼1
except (異常類型1, 異常類型2,...):
代碼塊2
finally:
代碼塊3
4)語法四: 同時捕獲指定多個異常
try:
代碼1
except 異常類型1:
代碼塊21
except 異常類型2:
代碼塊22
except 異常類型3:
代碼塊23
...
finally:
代碼塊3
3.finally關鍵字
前面四種捕獲異常的結構的最后面都可以加一個finally
finally后面的代碼段一定會執行
4.拋出異常
主動讓程序崩潰
語法:
raise 異常類型
說明: 異常類型必須是Exception的子類
raise ValueError
class AgeError(Exception):
def __str__(self):
return 'age not in range 0~150'
age = 1000
if not 0 <= age <= 150:
raise AgeError
二.模塊的使用
# import test
# from test import func1
from test import *
1.什么是模塊
python中一個py文件就是一個模塊
2.怎么在一個模塊中使用另外一個模塊中的內容
如果要在一個模塊中去使用另外一個模塊中的內容, 必須先導入模塊
1)語法:
a.import 模塊名 - 導入指定模塊, 導入后可以在當前模塊中使用模塊中所有的全局變量, 以'模塊名.全局變量名'的方式去使用
b.from 模塊名 import 變量名1, 變量名2, ... - 導入指定模塊, 導入后只能使用import后面指定的變量, 導入后指定的全局變量在當前模塊中直接使用, 不用在前面加'模塊名.'
c.from 模塊名 import * - 導入指定模塊, 導入后可以在當前模塊中使用模塊中所有的全局變量; 導入后全局變量在當前模塊中直接使用, 不用在前面加'模塊名.'
d.import 模塊名 as 新模塊名
e.from 模塊名 import 變量名1 as 新變量名1,...
# test.func1()
func1()
3.導入模塊的原理
當執行導入模塊的代碼的時候, 會直接執行被導入的模塊中所有的代碼
1)重復導入問題
import在導入模塊的時候會自動檢測這個模塊之前是否已經導入過, 來避免一個模塊的重復導入
2)阻止模塊中的內容被其他模塊導入
將不需要其他模塊執行的語句寫入'if name == 'main':'對應的if語句中
三.包的使用
1.什么是包
一個帶有__init__.py文件的文件夾就叫包
2.直接導入包 - 只執行init.py文件
import animal
3.從包中導入指定的模塊
from animal import bird
from animal.bird import a
print(a)
四.系統常用模塊
import time
import os
import sys
import calendar
from hashlib import *
print(time.gmtime())
print(sys.version)
print(sys.path)
print(calendar.weekday(2019, 8, 7))
1.hashlib是python3.x提供的一個hash加密的模塊: 支持目前主流的一些加密算法: sha256, md5等
hash加密特點:
a.相同的數據采用同一個加密算法保證加密結果一樣
b.通過加密后的數據不能反向獲取原數據
c.采用同樣的加密算法, 不管原數據的大小是多少, 加密后的數據的長度是一樣的
pw = '123456' # 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
2.加密步驟
1)根據加密算法創建hash對象
hash_pw = sha3_256()
2)對數據進行加密
hash對象.update(加密數據) - 加密數據必須是二進制數據
字符串轉2進制: a.字符串.encode(encoding='utf-8') b.bytes(字符串, encoding='utf-8')
sha3_256().update(pw.encode())
3)根據hash對象獲取加密后的數據(字符串類型)
result = sha3_256().hexdigest()
print(result)