日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

B站黑马Python笔记,打卡day3

發布時間:2024/3/13 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 B站黑马Python笔记,打卡day3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異常

目標

  • 異常的概念
  • 捕獲異常
  • 異常的傳遞
  • 拋出異常

01. 異常的概念

  • 程序在運行時,如果 Python 解釋器 遇到 到一個錯誤,會停止程序的執行,并且提示一些錯誤信息,這就是 異常
  • 程序停止執行并且提示錯誤信息 這個動作,我們通常稱之為:拋出(raise)異常

程序開發時,很難將 所有的特殊情況 都處理的面面俱到,通過 異常捕獲 可以針對突發事件做集中的處理,從而保證程序的 穩定性和健壯性

02. 捕獲異常

2.1 簡單的捕獲異常語法

  • 在程序開發中,如果 對某些代碼的執行不能確定是否正確,可以增加 try(嘗試) 來 捕獲異常
  • 捕獲異常最簡單的語法格式:
try:嘗試執行的代碼 except:出現錯誤的處理
  • try 嘗試,下方編寫要嘗試代碼,不確定是否能夠正常執行的代碼
  • except 如果不是,下方編寫嘗試失敗的代碼

簡單異常捕獲演練 —— 要求用戶輸入整數

try:# 提示用戶輸入一個數字num = int(input("請輸入數字:")) except:print("請輸入正確的數字")

2.2 錯誤類型捕獲

  • 在程序執行時,可能會遇到 不同類型的異常,并且需要 針對不同類型的異常,做出不同的響應,這個時候,就需要捕獲錯誤類型了

  • 語法如下:

try:# 嘗試執行的代碼pass except 錯誤類型1:# 針對錯誤類型1,對應的代碼處理pass except (錯誤類型2, 錯誤類型3):# 針對錯誤類型2 和 3,對應的代碼處理pass except Exception as result:print("未知錯誤 %s" % result)
  • 當 Python 解釋器 拋出異常 時,最后一行錯誤信息的第一個單詞,就是錯誤類型

異常類型捕獲演練 —— 要求用戶輸入整數

需求

  • 提示用戶輸入一個整數
  • 使用 8 除以用戶輸入的整數并且輸出
  • try:num = int(input("請輸入整數:"))result = 8 / numprint(result) except ValueError:print("請輸入正確的整數") except ZeroDivisionError:print("除 0 錯誤")

    捕獲未知錯誤

    • 在開發時,要預判到所有可能出現的錯誤,還是有一定難度的
    • 如果希望程序 無論出現任何錯誤,都不會因為 Python 解釋器 拋出異常而被終止,可以再增加一個 except

    語法如下:

    except Exception as result:print("未知錯誤 %s" % result)

    2.3 異常捕獲完整語法

    • 在實際開發中,為了能夠處理復雜的異常情況,完整的異常語法如下:

    提示:

    • 有關完整語法的應用場景,在后續學習中,結合實際的案例會更好理解
    • 現在先對這個語法結構有個印象即可
    try:# 嘗試執行的代碼pass except 錯誤類型1:# 針對錯誤類型1,對應的代碼處理pass except 錯誤類型2:# 針對錯誤類型2,對應的代碼處理pass except (錯誤類型3, 錯誤類型4):# 針對錯誤類型3 和 4,對應的代碼處理pass except Exception as result:# 打印錯誤信息print(result) else:# 沒有異常才會執行的代碼pass finally:# 無論是否有異常,都會執行的代碼print("無論是否有異常,都會執行的代碼")
    • else 只有在沒有異常時才會執行的代碼

    • finally 無論是否有異常,都會執行的代碼

    • 之前一個演練的 完整捕獲異常 的代碼如下:

    try:num = int(input("請輸入整數:"))result = 8 / numprint(result) except ValueError:print("請輸入正確的整數") except ZeroDivisionError:print("除 0 錯誤") except Exception as result:print("未知錯誤 %s" % result) else:print("正常執行") finally:print("執行完成,但是不保證正確")

    03. 異常的傳遞

    • 異常的傳遞 —— 當 函數/方法 執行 出現異常,會 將異常傳遞 給 函數/方法 的 調用一方
    • 如果 傳遞到主程序,仍然 沒有異常處理,程序才會被終止

    提示

    • 在開發中,可以在主函數中增加 異常捕獲
    • 而在主函數中調用的其他函數,只要出現異常,都會傳遞到主函數的 異常捕獲
    • 這樣就不需要在代碼中,增加大量的 異常捕獲,能夠保證代碼的整潔

    需求

  • 定義函數 demo1() 提示用戶輸入一個整數并且返回
  • 定義函數 demo2() 調用 demo1()
  • 在主程序中調用 demo2()
  • def demo1():return int(input("請輸入一個整數:"))def demo2():return demo1()try:print(demo2()) except ValueError:print("請輸入正確的整數") except Exception as result:print("未知錯誤 %s" % result)

    04. 拋出 raise 異常

    4.1 應用場景

    • 在開發中,除了 代碼執行出錯 Python 解釋器會 拋出 異常之外
    • 還可以根據 應用程序 特有的業務需求 主動拋出異常

    示例

    • 提示用戶 輸入密碼,如果 長度少于 8,拋出 異常

    注意

    • 當前函數 只負責 提示用戶輸入密碼,如果 密碼長度不正確,需要其他的函數進行額外處理
    • 因此可以 拋出異常,由其他需要處理的函數 捕獲異常

    4.2 拋出異常

    • Python 中提供了一個 Exception 異常類
    • 在開發時,如果滿足 特定業務需求時,希望 拋出異常,可以:
    • 創建 一個 Exception 的 對象
    • 使用 raise 關鍵字 拋出 異常對象

    需求

    • 定義 input_password 函數,提示用戶輸入密碼
    • 如果用戶輸入長度 < 8,拋出異常
    • 如果用戶輸入長度 >=8,返回輸入的密碼
    def input_password():# 1. 提示用戶輸入密碼pwd = input("請輸入密碼:")# 2. 判斷密碼長度,如果長度 >= 8,返回用戶輸入的密碼if len(pwd) >= 8:return pwd# 3. 密碼長度不夠,需要拋出異常# 1> 創建異常對象 - 使用異常的錯誤信息字符串作為參數ex = Exception("密碼長度不夠")# 2> 拋出異常對象raise extry:user_pwd = input_password()print(user_pwd) except Exception as result:print("發現錯誤:%s" % result)

    模塊和包

    目標

    • 模塊
    • 發布模塊

    01. 模塊

    1.1 模塊的概念

    模塊是 Python 程序架構的一個核心概念

    • 每一個以擴展名 py 結尾的 Python 源代碼文件都是一個 模塊
    • 模塊名 同樣也是一個 標識符,需要符合標識符的命名規則
    • 在模塊中定義的 全局變量函數 都是提供給外界直接使用的 工具
    • 模塊 就好比是 工具包,要想使用這個工具包中的工具,就需要先 導入 這個模塊

    1.2 模塊的兩種導入方式

    1)import 導入

    import 模塊名1, 模塊名2

    提示:在導入模塊時,每個導入應該獨占一行

    import 模塊名1 import 模塊名2
    • 導入之后
      • 通過 模塊名. 使用 模塊提供的工具 —— 全局變量函數
    使用 as 指定模塊的別名

    如果模塊的名字太長,可以使用 as 指定模塊的名稱,以方便在代碼中的使用

    import 模塊名1 as 模塊別名

    注意:模塊別名 應該符合 大駝峰命名法

    2)from…import 導入

    • 如果希望 從某一個模塊 中,導入 部分 工具,就可以使用 from ... import 的方式
    • import 模塊名 是 一次性 把模塊中 所有工具全部導入,并且通過 模塊名/別名 訪問
    # 從 模塊 導入 某一個工具 from 模塊名1 import 工具名
    • 導入之后
      • 不需要 通過 模塊名.
      • 可以直接使用 模塊提供的工具 —— 全局變量函數

    注意

    如果 兩個模塊,存在 同名的函數,那么 后導入模塊的函數,會 覆蓋掉先導入的函數

    • 開發時 import 代碼應該統一寫在 代碼的頂部,更容易及時發現沖突
    • 一旦發現沖突,可以使用 as 關鍵字 給其中一個工具起一個別名
    from…import *(知道)
    # 從 模塊 導入 所有工具 from 模塊名1 import *

    注意

    這種方式不推薦使用,因為函數重名并沒有任何的提示,出現問題不好排查

    1.3 模塊的搜索順序[擴展]

    Python 的解釋器在 導入模塊 時,會:

  • 搜索 當前目錄 指定模塊名的文件,如果有就直接導入
  • 如果沒有,再搜索 系統目錄
  • 在開發時,給文件起名,不要和 系統的模塊文件 重名

    Python 中每一個模塊都有一個內置屬性 __file__ 可以 查看模塊完整路徑

    示例

    import random# 生成一個 0~10 的數字 rand = random.randint(0, 10)print(rand)

    注意:如果當前目錄下,存在一個 random.py 的文件,程序就無法正常執行了!

    • 這個時候,Python 的解釋器會 加載當前目錄 下的 random.py 而不會加載 系統的 random 模塊

    1.4 原則 —— 每一個文件都應該是可以被導入的

    • 一個 獨立的 Python 文件 就是一個 模塊
    • 在導入文件時,文件中 所有沒有任何縮進的代碼 都會被執行一遍!

    實際開發場景

    • 在實際開發中,每一個模塊都是獨立開發的,大多都有專人負責
    • 開發人員 通常會在 模塊下方 增加一些測試代碼
      • 僅在模塊內使用,而被導入到其他文件中不需要執行

    __name__ 屬性

    • __name__ 屬性可以做到,測試模塊的代碼 只在測試情況下被運行,而在 被導入時不會被執行
    • __name__ 是 Python 的一個內置屬性,記錄著一個 字符串
    • 如果 是被其他文件導入的,__name__ 就是 模塊名
    • 如果 是當前執行的程序 __name__ 是 __main__

    在很多 Python 文件中都會看到以下格式的代碼

    # 導入模塊 # 定義全局變量 # 定義類 # 定義函數# 在代碼的最下方 def main():# ...pass# 根據 __name__ 判斷是否執行下方代碼 if __name__ == "__main__":main()

    02. 包(Package)

    概念

    • 是一個 包含多個模塊特殊目錄
    • 目錄下有一個 特殊的文件 __init__.py
    • 包名的 命名方式 和變量名一致,小寫字母 + _

    好處

    • 使用 import 包名 可以一次性導入 所有的模塊

    案例演練

  • 新建一個 hm_message 的
  • 在目錄下,新建兩個文件 send_message 和 receive_message
  • 在 send_message 文件中定義一個 send 函數
  • 在 receive_message 文件中定義一個 receive 函數
  • 在外部直接導入 hm_message 的包
  • __init__.py

    • 要在外界使用 中的模塊,需要在 __init__.py 中指定 對外界提供的模塊列表
    # 從 當前目錄 導入 模塊列表 from . import send_message from . import receive_message

    03. 發布模塊(知道)

    • 如果希望自己開發的模塊,分享 給其他人,可以按照以下步驟操作

    3.1 制作發布壓縮包步驟

    1) 創建 setup.py

    • setup.py 的文件
    from distutils.core import setupsetup(name="hm_message", # 包名version="1.0", # 版本description="itheima's 發送和接收消息模塊", # 描述信息long_description="完整的發送和接收消息模塊", # 完整描述信息author="itheima", # 作者author_email="itheima@itheima.com", # 作者郵箱url="www.itheima.com", # 主頁py_modules=["hm_message.send_message","hm_message.receive_message"])

    有關字典參數的詳細信息,可以參閱官方網站:

    https://docs.python.org/2/distutils/apiref.html

    2) 構建模塊

    $ python3 setup.py build

    3) 生成發布壓縮包

    $ python3 setup.py sdist

    注意:要制作哪個版本的模塊,就使用哪個版本的解釋器執行!

    3.2 安裝模塊

    $ tar -zxvf hm_message-1.0.tar.gz $ sudo python3 setup.py install

    卸載模塊

    直接從安裝目錄下,把安裝模塊的 目錄 刪除就可以

    $ cd /usr/local/lib/python3.5/dist-packages/ $ sudo rm -r hm_message*

    3.3 pip 安裝第三方模塊

    • 第三方模塊 通常是指由 知名的第三方團隊 開發的 并且被 程序員廣泛使用 的 Python 包 / 模塊
      • 例如 pygame 就是一套非常成熟的 游戲開發模塊
    • pip 是一個現代的,通用的 Python 包管理工具
    • 提供了對 Python 包的查找、下載、安裝、卸載等功能

    安裝和卸載命令如下:

    # 將模塊安裝到 Python 2.x 環境 $ sudo pip install pygame $ sudo pip uninstall pygame# 將模塊安裝到 Python 3.x 環境 $ sudo pip3 install pygame $ sudo pip3 uninstall pygame

    在 Mac 下安裝 iPython

    $ sudo pip install ipython

    在 Linux 下安裝 iPython

    $ sudo apt install ipython $ sudo apt install ipython3

    文件

    目標

    • 文件的概念
    • 文件的基本操作
    • 文件/文件夾的常用操作
    • 文本文件的編碼方式

    01. 文件的概念

    1.1 文件的概念和作用

    • 計算機的 文件,就是存儲在某種 長期儲存設備 上的一段 數據
    • 長期存儲設備包括:硬盤、U 盤、移動硬盤、光盤…

    文件的作用

    將數據長期保存下來,在需要的時候使用

    | CPU | 內存 | 硬盤 |


    1.2 文件的存儲方式

    • 在計算機中,文件是以 二進制 的方式保存在磁盤上的

    文本文件和二進制文件

    • 文本文件

      • 可以使用 文本編輯軟件 查看
      • 本質上還是二進制文件
      • 例如:python 的源程序
    • 二進制文件

      • 保存的內容 不是給人直接閱讀的,而是 提供給其他軟件使用的
      • 例如:圖片文件、音頻文件、視頻文件等等
      • 二進制文件不能使用 文本編輯軟件 查看

    02. 文件的基本操作

    2.1 操作文件的套路

    計算機 中要操作文件的套路非常固定,一共包含三個步驟

  • 打開文件
  • 讀、寫文件
    • 將文件內容讀入內存
    • 將內存內容寫入文件
  • 關閉文件
  • 2.2 操作文件的函數/方法

    • 在 Python 中要操作文件需要記住 1 個函數和 3 個方法
    序號函數/方法說明
    01open打開文件,并且返回文件操作對象
    02read將文件內容讀取到內存
    03write將指定內容寫入文件
    04close關閉文件
    • open 函數負責打開文件,并且返回文件對象
    • read/write/close 三個方法都需要通過 文件對象 來調用

    2.3 read 方法 —— 讀取文件

    • open 函數的第一個參數是要打開的文件名(文件名區分大小寫)
      • 如果文件 存在,返回 文件操作對象
      • 如果文件 不存在,會 拋出異常
    • read 方法可以一次性 讀入返回 文件的 所有內容
    • close 方法負責 關閉文件
      • 如果 忘記關閉文件會造成系統資源消耗,而且會影響到后續對文件的訪問
    • 注意:read 方法執行后,會把 文件指針 移動到 文件的末尾
    # 1. 打開 - 文件名需要注意大小寫 file = open("README")# 2. 讀取 text = file.read() print(text)# 3. 關閉 file.close()

    提示

    • 在開發中,通常會先編寫 打開關閉 的代碼,再編寫中間針對文件的 讀/寫 操作!

    文件指針(知道)

    • 文件指針 標記 從哪個位置開始讀取數據
    • 第一次打開 文件時,通常 文件指針會指向文件的開始位置
    • 當執行了 read 方法后,文件指針 會移動到 讀取內容的末尾
      • 默認情況下會移動到 文件末尾

    思考

    • 如果執行了一次 read 方法,讀取了所有內容,那么再次調用 read 方法,還能夠獲得到內容嗎?

    答案

    • 不能
    • 第一次讀取之后,文件指針移動到了文件末尾,再次調用不會讀取到任何的內容

    2.4 打開文件的方式

    • open 函數默認以 只讀方式 打開文件,并且返回文件對象

    語法如下:

    f = open("文件名", "訪問方式") 訪問方式說明
    r只讀方式打開文件。文件的指針將會放在文件的開頭,這是默認模式。如果文件不存在,拋出異常
    w只寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件
    a追加方式打開文件。如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入
    r+讀寫方式打開文件。文件的指針將會放在文件的開頭。如果文件不存在,拋出異常
    w+讀寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件
    a+讀寫方式打開文件。如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入

    提示

    • 頻繁的移動文件指針,會影響文件的讀寫效率,開發中更多的時候會以 只讀只寫 的方式來操作文件

    寫入文件示例

    # 打開文件 f = open("README", "w")f.write("hello python!\n") f.write("今天天氣真好")# 關閉文件 f.close()

    2.5 按行讀取文件內容

    • read 方法默認會把文件的 所有內容 一次性讀取到內存
    • 如果文件太大,對內存的占用會非常嚴重

    readline 方法

    • readline 方法可以一次讀取一行內容
    • 方法執行后,會把 文件指針 移動到下一行,準備再次讀取

    讀取大文件的正確姿勢

    # 打開文件 file = open("README")while True:# 讀取一行內容text = file.readline()# 判斷是否讀到內容if not text:break# 每讀取一行的末尾已經有了一個 `\n`print(text, end="")# 關閉文件 file.close()

    2.6 文件讀寫案例 —— 復制文件

    目標

    用代碼的方式,來實現文件復制過程

    小文件復制

    • 打開一個已有文件,讀取完整內容,并寫入到另外一個文件
    # 1. 打開文件 file_read = open("README") file_write = open("README[復件]", "w")# 2. 讀取并寫入文件 text = file_read.read() file_write.write(text)# 3. 關閉文件 file_read.close() file_write.close()

    大文件復制

    • 打開一個已有文件,逐行讀取內容,并順序寫入到另外一個文件
    # 1. 打開文件 file_read = open("README") file_write = open("README[復件]", "w")# 2. 讀取并寫入文件 while True:# 每次讀取一行text = file_read.readline()# 判斷是否讀取到內容if not text:breakfile_write.write(text)# 3. 關閉文件 file_read.close() file_write.close()

    03. 文件/目錄的常用管理操作

    • 終端 / 文件瀏覽器、 中可以執行常規的 文件 / 目錄 管理操作,例如:
      • 創建、重命名、刪除、改變路徑、查看目錄內容、……
    • 在 Python 中,如果希望通過程序實現上述功能,需要導入 os 模塊

    文件操作

    序號方法名說明示例
    01rename重命名文件os.rename(源文件名, 目標文件名)
    02remove刪除文件os.remove(文件名)

    目錄操作

    序號方法名說明示例
    01listdir目錄列表os.listdir(目錄名)
    02mkdir創建目錄os.mkdir(目錄名)
    03rmdir刪除目錄os.rmdir(目錄名)
    04getcwd獲取當前目錄os.getcwd()
    05chdir修改工作目錄os.chdir(目標目錄)
    06path.isdir判斷是否是文件os.path.isdir(文件路徑)

    提示:文件或者目錄操作都支持 相對路徑絕對路徑

    04. 文本文件的編碼格式(科普)

    • 文本文件存儲的內容是基于 字符編碼 的文件,常見的編碼有 ASCII 編碼,UNICODE 編碼等

    Python 2.x 默認使用 ASCII 編碼格式
    Python 3.x 默認使用 UTF-8 編碼格式

    4.1 ASCII 編碼和 UNICODE 編碼

    ASCII 編碼

    • 計算機中只有 256 個 ASCII 字符
    • 一個 ASCII 在內存中占用 1 個字節 的空間
      • 8 個 0/1 的排列組合方式一共有 256 種,也就是 2 ** 8

    UTF-8 編碼格式

    • 計算機中使用 1~6 個字節 來表示一個 UTF-8 字符,涵蓋了 地球上幾乎所有地區的文字
    • 大多數漢字會使用 3 個字節 表示
    • UTF-8 是 UNICODE 編碼的一種編碼格式

    4.2 Ptyhon 2.x 中如何使用中文

    Python 2.x 默認使用 ASCII 編碼格式
    Python 3.x 默認使用 UTF-8 編碼格式

    • 在 Python 2.x 文件的 第一行 增加以下代碼,解釋器會以 utf-8 編碼來處理 python 文件
    # *-* coding:utf8 *-*

    這方式是官方推薦使用的!

    • 也可以使用
    # coding=utf8

    unicode 字符串

    • 在 Python 2.x 中,即使指定了文件使用 UTF-8 的編碼格式,但是在遍歷字符串時,仍然會 以字節為單位遍歷 字符串
    • 要能夠 正確的遍歷字符串,在定義字符串時,需要 在字符串的引號前,增加一個小寫字母 u,告訴解釋器這是一個 unicode 字符串(使用 UTF-8 編碼格式的字符串)
    # *-* coding:utf8 *-*# 在字符串前,增加一個 `u` 表示這個字符串是一個 utf8 字符串 hello_str = u"你好世界"print(hello_str)for c in hello_str:print(c)

    eval 函數

    eval() 函數十分強大 —— 將字符串 當成 有效的表達式 來求值 并 返回計算結果

    # 基本的數學計算 In [1]: eval("1 + 1") Out[1]: 2# 字符串重復 In [2]: eval("'*' * 10") Out[2]: '**********'# 將字符串轉換成列表 In [3]: type(eval("[1, 2, 3, 4, 5]")) Out[3]: list# 將字符串轉換成字典 In [4]: type(eval("{'name': 'xiaoming', 'age': 18}")) Out[4]: dict

    案例 - 計算器

    需求

  • 提示用戶輸入一個 加減乘除混合運算
  • 返回計算結果
  • input_str = input("請輸入一個算術題:")print(eval(input_str))

    不要濫用 eval

    在開發時千萬不要使用 eval 直接轉換 input 的結果

    __import__('os').system('ls')
    • 等價代碼
    import osos.system("終端命令")
    • 執行成功,返回 0
    • 執行失敗,返回錯誤信息

    總結

    以上是生活随笔為你收集整理的B站黑马Python笔记,打卡day3的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。