Day13 異常和模塊

一.異常

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)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.異常 運行程序的時候出現報錯,又叫程序出現異常當執行程序的時候如果出現異常,出現異常的線程會直接崩潰,不再執行...
    Ed97001閱讀 164評論 0 0
  • 一、異常 1.異常 運行程序的時候程序報錯,又叫程序出現異常 當執行程序的時候如果出現異常,出現異常的線程會直接奔...
    LI3e0閱讀 254評論 0 0
  • 1.異常 1)異常. 運行程序的時候程序報錯,又叫程序出現異常;當執行程序的時候如果出現異常,出現異常的線程會直接...
    tcis閱讀 282評論 0 0
  • 1.異常 運行程序的時候程序報錯,又叫程序出現異常;當執行程序的時候如果出現異常,出現異常的線程會直接奔潰,不再執...
    Lingod閱讀 132評論 0 1
  • 一、異常處理 異常程序報錯,又叫程序出現異常當執行程序的時候,如果出現異常,出現異常的線程會直接崩潰,不再執行后面...
    Wa_ngli閱讀 220評論 0 0