異常
概念
- 程序運行時,如果Python 解釋器遇到了錯誤,會停止程序運行,并且提示錯誤信息,這就是異常
- 程序停止執(zhí)行并提示錯誤信息的動作,稱為 拋出異常
異常捕獲
- **try: ** 里面的代碼,不確定是否能夠正常執(zhí)行.
- **except: ** 當try里面的代碼出現錯誤時,程序會跳到except 里執(zhí)行
- 對某些代碼的執(zhí)行不確定是否正確,可以使用 try: except 來捕獲并處理異常
語法
try:
嘗試執(zhí)行代碼
except:
出現錯誤的處理
錯誤類型
- 在Python中,程序執(zhí)行時可能會遇到 不同類型的異常 ,并且需要針對不同類型的異常,做出不同的響應,這時就需要捕獲異常類型了
- 當 Python解釋器 拋出異常時 ,最后一行錯誤信息的第一個單詞,就是錯誤類型
- 如果希望 無論出現任何錯誤 ,都不會因為 Python 解釋器 拋出異常而被終止**,可以用 except Exception **
語法
try:
嘗試執(zhí)行的代碼
except 錯誤類型1:
針對錯誤類型1,對應的處理代碼
except (錯誤類型2,錯誤類型3):
針對錯誤類型2和3,對應的處理代碼
except Exception as e:
未知錯誤處理
示例
try:
# 除零異常 案例
# num=10/0
# 其它異常
ss=int("df")
except ZeroDivisionError:
print("這是除0異常")
except Exception as e:
print("未知異常:",e)
輸出結果
異常的傳遞
- 當函數/方法 執(zhí)行出現異常,會將異常傳遞給 函數/方法 的調用一方
- 如果 傳遞到主程序 ,仍然 ** 沒有異常處理** ,程序才會被終止
主動拋出異常
- 在開發(fā)中,除了 代碼執(zhí)行出錯 Python ** 解釋器 拋出異常之外** ,還可以根據 應用程序特有的業(yè)務需求 ,主動拋出異常
- Python 中提供了一個 Exception 異常類
- 如果想要主動拋出異常
- 創(chuàng)建一個 Exception 的對象
- 使用 raise 關鍵字拋出異常
**示例
**
def input_pwd(pwdd):
""" 校驗密碼,密碼長度只能是6位 """
if len(pwdd)!=6:
ex=Exception("主動拋出異常:密碼長度不符合規(guī)定!!")
raise ex
print("你輸入的密碼是:%s" %pwdd)
try:
input_pwd("2332323232")
except Exception as e:
print(e)
**輸出結果
**
模塊
概念
- 模塊是 Python 程序架構的一個核心概念
- 每一個以擴展名** py** 結尾的 **Ptyon **源代碼文件都是一個 模塊
- **模塊名 **同樣也是一個標識符,需要符合標識符的命名規(guī)則
- 在模塊中定義的 全局變量、函數、類 都是提供給外面直接使用的工具
- 模塊 就好比是工具包,要想使用這個工具包中的工具,就需要先導入這個模塊
import 導入示例
# 方式一
import 模塊名1,模塊名2
# 方式二
import 模塊名1
import 模塊名2
# 方式三,導入后使用別名
import 模塊1 as 模塊別名
**導入后,通過模塊名. **使用 模塊提供的工具 (全局變量、函數、類)
from... import 導入
- 如果希望 **從某一個模塊 **中,導入 部分 工具 , 就可以使用 from ... import 的方式
- import 模塊名 **是一次性 把模塊中 所有工具全部導入, 并且通過 模塊名/別名 **訪問
- 導入后不需要通過 ** 模塊名. ,** 可以直接使用** 模塊提供的工具 ——全局變量、函數、類**
- 如果 兩個模塊, 存在同名的函數**,后導入的模塊會覆蓋先導入的模塊**
- 一旦發(fā)生沖突,可以使用 as 關鍵字給其中一個工具起一個別名
# 從模塊中導入某個工具
form 模塊名1 import 工具名
# 導入所有工具(不推薦使用,出現同名工具不好查)
from 模塊名 import *
示例
import random as rd
from tqdm import tqdm
num=rd.randint(0,10)
print("生成的隨機數是:%d" %num)
# 生成進度條
for i in tqdm(range(10)):
pass
輸出結果
原則
- 每一個文件都應該是可以被導入的
- 一個獨立的 Python 文件就是一個** 模塊**
- 在導入文件時,文件中** 所有沒有任何縮進的代碼** 都會被執(zhí)行一遍
**name **屬性
- name 可以做到,測試模塊的代碼 只在測試情況下運行,而在 被導入時不會執(zhí)行
- **name **是 Python 的一個內置屬性,記錄著一個字符串
- 如果被其他文件導入 name 就是模塊名
- 如果 是當前執(zhí)行的程序 name 是 main
**示例 **
cal.py 文件內容
name ="張三"
def add(a,b):
return a+b
def reduce(a,b):
return a-b
print("計算結果是:%d" %add(1,2))
hello3.py 文件內容
import cal
num=cal.add(2,2)
print("num的值:%d" %num)
執(zhí)行 hello3.py 的結果
如果不想執(zhí)行 cal.py 模塊中打印的內容,可以加 if name ==" main "
name ="張三"
def add(a,b):
return a+b
def reduce(a,b):
return a-b
if __name__ == "__main__":
print("計算結果是:%d" %add(1,2))
修改完 cal.py 后,再次執(zhí)行 hello3.py 文件
包
概念
- **包 是一個包含多個模塊的 特殊目錄 **
- 目錄下有個特殊文件** init .py**
- 包名的命名方式 和變量名一致,小寫字母 +_
- 優(yōu)點
- 使用 import 包名,可以一次性導入包中所有模塊
** init .py 文件**
- 要在外界使用** 包 **中的模塊,需要在 init .py 中指定 對外界提供的模塊列表
# 從當前目錄 導入模塊列表
from . import test1
from . import test2
示例
制作模塊
發(fā)布模塊
- 如果希望自己的模塊,分享給其他人,可以按照以下步驟操作
- 創(chuàng)建 setup.py
- 構建模塊
- 命名行輸入: python setup.py build
- 生成發(fā)布的壓縮包
- 命名行輸入: python setup.py sdist
安裝模塊
-
解壓 ani-1.0.tar.gz 壓縮包
-
進入解壓后的目錄,命令行輸入:python setup.py install
卸載模塊
- 直接從安裝目錄下,把安裝的模塊 目錄 刪除就可以了
**pip 安裝第三方模塊
**
- pip 是一個現代的,通用的 Python 包管理工具
- 提供了對 Python 包的查找、下載、安裝、卸載等功能
- 安裝與制裁命令如下
- pip install xxx
- pip uninstall xxx
示例
-
程序
+關注
關注
117文章
3817瀏覽量
82243 -
python
+關注
關注
56文章
4822瀏覽量
85948 -
解釋器
+關注
關注
0文章
103瀏覽量
6674
發(fā)布評論請先 登錄
python常見異常類型
什么是python包、模塊和庫?
python常規(guī)包與命名空間包
python-速成指南
在Anaconda中安裝python包seaborn

python如何捕獲異常和主動拋出異常
python包、模塊和庫是什么
詳解python常規(guī)包與命名空間包
python包模塊相對導入from和import介紹1
python包模塊相對導入from和import介紹2
簡述python包模塊import和from及all
Python SDK包的使用

評論