11 - 異常、模塊、包

返回主頁

📄目錄

1. 異常

💡 含義:程序執行過程中出現的非正常的流程現象

💡 常見異常種類

https://www.notion.so/icons/forward_gray.svg

異常種類含義
NameError使用一個還未被賦值的變量
SyntaxError代碼不符合python語法規定
IndexError下標/索引超出範圍
ZeroDivisionError除數為0
KeyError字典中不存在這個鍵
IOError輸入/輸出操作失敗,基本上是無法打開文件(比如要讀的文件不存在)
AttributeError對象沒有這個屬性
ValueError傳入的值有錯誤
TypeError類型錯誤,傳入的類型不匹配
ImportError無法引入模塊或包;基本上是路徑問題或名稱錯誤
IndentationError縮進錯誤;代碼沒有正確對齊

2. 異常處理

2.1 方式一:根據控制台的錯誤提示找到出錯點並分析改正

python-logo

輸出結果:

2.2 方式二:捕獲異常(對異常進行捕獲處理)

2.2.1 語法格式一

💡

python-logo

輸出結果:

python-logo

❗ 可以聲明捕獲異常類型,但是遇到其他異常類型時依然會報錯,無法捕獲異常

輸出結果:

python-logo

❗ 當要捕獲多個異常類型時,可以把要捕獲的異常類型的外字放在expect後,並以「元組」的形式保存

輸出結果:

python-logo

❗ 萬能異常、打印異常回報

輸出結果:

2.2.2 語法格式二

💡

python-logo

輸出結果:

💡 try和else一起執行,except單獨執行

python-logo

輸出結果:

2.2.3 語法格式三

💡

python-logo

輸出結果:

❗ 可以單獨使用try…finally,也可以配合except等使用

2.3 抛出異常 raise

💡

  1. 創建一個Exception('xxx')對象,xxx---異常提示信息

  2. raise抛出這個對象(異常對象)

python-logo

輸出結果:

python-logo

案例:密度長度不足就報異常

分析:首先用戶要輸入密碼,判斷輸入長度是否大於等於6,如果輸入長度不足6位,就報錯,即抛出自定義異常,並捕獲該異常

輸出結果:

3. 模塊

3.1 含義和分類

💡 含義:一個py文件就是一個模塊,即導入一個模塊本質上就是執行一個py文件

💡 分類:

名稱描述注意⚠️
內置模塊例子:random、time、os、logging。直接導入即可使用 
第三方模塊下載cmd窗口輸入pip stall 模塊名(Mac要查一下) 
自定義模塊即自己在項目中定義的模塊注意:命名要遵循標識符規定以及變量的命名規範,並且不要與內置模塊起衝突

3.2 導入方式

3.2.1 方式一 import 模塊名(建議使用)

💡 語法:

python-logo

👉🏻 需要有一個pytest.py文件,且填充以下內容

輸出結果:

3.2.2 方式二 from ... import …

💡 語法:

💡 調入功能時直接輸入功能即可,不需要再次添加模塊名

python-logo

👉🏻 需要有一個pytest.py文件,且填充以下內容

輸出結果:

3.2.3 方式三 from ... import *

💡 語法:

python-logo

👉🏻 需要有一個pytest.py文件,且填充以下內容

輸出結果:

❗ 不建議過多使用from…import…聲明,因為在命名重複時很容易報錯

遇到同名的變量、函數時,調用到的會是最後導入的變量、函數

3.3 as起別名

3.3.1 as給模塊起別名

💡 語法:

python-logo

👉🏻 需要有一個pytest.py文件,且填充以下內容

輸出結果:

3.3.2 as給功能起別名

💡 語法:

python-logo

👉🏻 需要有一個pytest.py文件,且填充以下內容

輸出結果:

❗ 注意:導入多個功能使用,隔開,將功能與功能隔開,後面的功能也可以取別名

3.4 內置全局變量 __name__

3.4.1 語法和作用

💡 語法:

作用:用來控制py文件在不同應用場景執行不同的邏輯

3.4.2 __name__

python-logo

👉🏻 需要有一個pytest2.py文件,且填充以下內容

輸出結果:

❗ 注意:當被當作模塊導入時,__name__ == '__main__',下面的代碼不會被顯示出來

4. 包

4.1 含義:就是項目結構中的文件夾/目錄

4.2 與普通文件夾的區別:包是含有__init__.py的文件夾

4.3 作用:將有聯繫的模塊放到同一個文件夾下,有效避免模塊名稱衝突問題,讓結構更清晰

4.4 新建包:右鍵項目名 -> new -> Python Package(普通文件夾就是Directory)

4.5 import導入包時,首先執行__init__.py文件的代碼

4.5.1 導包方式一:

python-logo

👉🏻 需要有一個pack_01包,且在其中的__init__.py填充以下內容

輸出結果:

4.5.2 導包方式二:

python-logo

👉🏻 需要有一個pack_01包,且在其中的register.py填充以下內容

輸出結果:

python-logo

👉🏻 需要有一個pack_01包,且在其中的register.py填充以下內容

並在__init__.py填充以下內容

輸出結果:

4.6 不建議在init文件中編寫大量代碼/python模式,盡量保證init的內容簡單

4.7 __all__:本質上是一個列表,列表裡面的元素就代表要導入的模塊

python-logo

👉🏻 需要有一個pack_01包,且在其中的register.py填充以下內容

並在__init__.py填充以下內容

輸出結果:

python-logo

👉🏻 需要有一個pack_01包,且在其中的register.py填充以下內容

在login.py填充以下內容

並在__init__.py填充以下內容

輸出結果:

4.8 包的本質依然是模塊,包又可以包含包

導航連結:

目的地超連結
首頁返回主頁
Python學習Python學習
上一篇10 - 函數進階
下一篇12 - 閉包&裝飾器