<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ### **異常:** ``` 1.程序執行過程中, python解釋器遇到錯誤,程序不再向下執行,并且提示錯誤信息,這就是異常 2.程序不再向下執行,并且提示錯誤信息的動作,就是拋出( ralse)異常 3.岀現異常需要捕捉異常,為什么?程序開發人員無法消滅異常(比如網絡不穩定), 只能靠捕捉異常,并對捕捉到的異常進行相應處理(圖片加載失敗,要提示相應的錯誤信息) ``` <br /> ### **異常的捕獲:----異常的重點** ``` 1.使用 try....except來捕獲異常并處理異常,把可能出現異常的代碼放在try縮進部分 2.except部分的代碼只有在發生異常時才會執行,可以處理異常修復或信息提示 3.只要捕捉了異常,不管try部分異常是否發生,程序都可以正常結束 4.在try語句中出現異常,異常后面的代碼不再執行 ``` <details> <summary>09_異常捕獲.py</summary> ``` # 09_異常捕獲 ''' 異常捕獲的語法: try: 可能出現異常的代碼 except: 如果try部分出現了異常,except部分一定會執行 except()部分主要用來捕獲異常,并處理異常 注意: 只要捕獲了異常,try部分無論有沒有異常,程序都可以正常結束 try部分有多個異常,只會捕獲第一個異常 ''' try: num = 1 print(num) except: print("已經捕獲到異常了,對異常進行處理") print("程序結束了") ``` </details> <br /> ``` 5.捕獲指定異常時,在 except后面添加異常類型 格式: except 異常類型 6.對同一個異常捕獲多次,只執行第一次捕獲的異常代碼 7.一次捕獲多個異常 格式: except(異常類型1,異常類型2,…) 作用:對不同的異常有相同的處理結果 8.捕獲任意類型異常 格式: except Exception: ``` <details> <summary>10_一次捕獲多個異常.py</summary> ``` # 10_一次捕獲多個異常 ''' 一次捕獲多個類型異常的語法: try: 可能出現異常的代碼 except (異常的類型1,異常的類型,異常的類型3…): 對上述異常的類型1,異常的類型2,異常的類型3,有相同的處理結果 如果try部分出現了異常, except部分一定會執行 except()部分主要用來捕獲異常,并處理異常 ''' try: print(num) except(NameError, FileNotFoundError): # 一次捕獲多個異常 print("已經捕獲到資源未找到異常了,對異常進行處理") except ValueError: print("已經捕獲到值錯誤異常,對異常進行處理") except ZeroDivisionError: # 對同一個異常捕獲多次,只能執行一次 print("已經捕獲到,除數為0錯誤異常,對異常進行處理----1---") print("程序結束了") print("---1---") print("---2---") print("---3---") ``` </details> <br /> ``` 9.獲取異常的錯誤信息,給異常類型起別名, except 異常類型名 as 別名 (別名中記錄異常的錯誤信息) ``` <details> <summary>12_捕獲異常的錯誤信息.py</summary> ``` # 12_捕獲異常的錯誤信息 ''' try: 可能出現異常的代碼 except 異常的類型 as 別名: 如果try部分出現了異常, except部分一定會執行 except()部分主要用來捕獲異常,并處理異常 except (異常的類型1,異常的類型2,異常的類型3....) as 別名: 對上述異常的類型1,異常的類型2,異常的類型3,有相同的處理結果 如果try部分出現了異常, except部分一定會執行 except()部分主要用來捕獲異常,并處理異常 except Exception as 別名: print("Exception捕獲任意類型異常") 別名中保存異常的錯誤信息 ''' try: lt = [10, 20] print(lt[5]) # def func(num): # print("--func---") # func() except NameError as ret: # 一次捕獲多個異常 print("已經捕獲到資源未找到異常了,對異常進行處理", ret) except ValueError as exp: print("已經捕獲到值錯誤異常,對異常進行處理", exp) except ZeroDivisionError as exp: # 對同一個異常捕獲多次,只能執行一次 print("已經捕獲到,除數為0錯誤異常,對異常進行處理----1---", exp) except Exception as exp: print("捕獲到任意類型異常了,對異常進行處理...", exp) print("程序結束了") print("---1---") print("---2---") print("---3---") ``` </details> <br /> ### **異常的完整語法:** ``` 1. 格式: try: # 可能會出現異常的代碼 except 異常類型1: # 針對異常類型1的處理代碼 except 異常類型2: # 針對異常類型2的處理代碼 except (異常類型3,異常類型4): # 針對異常類型3或異常類型4的處理代碼 except Exception as exp: # exp中獲取異常的錯誤信息 # except部分只有在發生異常時才會執行 else: # else部分在沒有發生異常時才會執行 finally: # finally部分無論有沒有異常都會執行... 2.應用場景,在打開文件向文件寫入數據時程序崩潰, 此時可以在 finally部分添加關閉文件資源的操作,避免系統資源浪費 ``` <details> <summary>14_異常的完整語句結構應用.py</summary> ``` # 14_異常的完整語句結構應用 try: file = open("new.txt", "w", encoding="utf-8") file.write([10, 20, 30]) except NameError as ret: # 一次捕獲多個異常 print("已經捕獲到資源未找到異常了,對異常進行處理", ret) except ValueError as exp: print("已經捕獲到值錯誤異常,對異常進行處理", exp) except ZeroDivisionError as exp: # 對同一個異常捕獲多次,只能執行一次 print("已經捕獲到,除數為0錯誤異常,對異常進行處理----1---", exp) except Exception as exp: print("捕獲到任意類型異常了,對異常進行處理...", exp) else: print("try部分沒有異常,else一定會執行") finally: print("finally 無論有沒有異常都會執行") print("----222-----") file.close() print("---333---") print("程序結束了") print("---1---") print("---2---") print("---3---") ``` </details> <br /> ``` 異常的傳遞: 1.如果在被調用的函數中有異常沒有捕獲處理,則會把異常傳遞給調用的地方 2.最終傳遞到Python解釋器依然沒有捕獲異常,則程序崩潰 拋出異常: 1.創建 Exception異常類的對象 有參數:字符串 2.使用 ralse拋出異常,語法: raise Exception("異常的錯誤提示信息") ``` <details> <summary>15_拋出異常.py</summary> ``` # 15_拋出異常 # 定義 input_password()函數,提示用戶輸入密碼 def input_password(): pwd = input("請輸入密碼:") # 如果用戶輸入密碼長度<8位,拋出異常 if len(pwd) < 8: print("拋出異常") # (1)使用Exception類創建對象 Exception(錯誤的提示) ex = Exception("錯誤:密碼長度小于8位") # (2)使用raise 拋出異常對象 raise ex # 如果用戶輸入長度 >=8位,返回輸入的密碼 else: return pwd try: ret = input_password() print(ret) except Exception as exp: print("捕獲任意類型異常, exp:", exp) ``` </details> <br /> ### **模塊:** ``` 1.以.py結尾的文件原則上都可以作為模塊使用,把成熟穩定的代碼封裝到模塊中 便于其它開發者使用 2.模塊名必須符合標識符的命名規范,(由數字,字母,下劃線組成,并且不能以數字開頭) 3.模塊中可以封裝全局變量,函數,類等,當做工具可以提供給其它開發者使用 4.使用模塊,則需要: 1).先導入模塊 import 模塊名 2).使用模塊中工具, 模塊名.全局變量名,模塊名.函數名() 5.如果模塊名太長,可以使用as給模塊起別名 ①格式: import 模塊名 as 模塊別名 ②注意:模塊別名要符合大駝峰命名法則 ``` <details> <summary>model1.py</summary> ``` # model1.py # 當前Python文件可以作為模塊 # 全局變量 g_num = 100 # 函數 def func(): print("-----model1.py---func---01----") # 類 class Cat: def __init__(self): self.name = "湯姆貓" def eat(self): print("%s 愛吃魚" % self.name) ``` </details> <br /> <details> <summary>model2.py</summary> ``` # model2.py # 當前Python文件可以作為模塊 # 全局變量 gl_str = "hello" # 函數 def func(): print("-----model2.py---func---02----") # 類 class Cat: def __init__(self): self.name = "大懶貓" def eat(self): print("%s 愛吃魚" % self.name) ``` </details> <br /> <details> <summary>01_導入模塊.py</summary> ``` # 01_導入模塊.py # 1.導入模塊 import day09.model1 import day09.model2 # 2.使用模塊中工具 模塊名.變量名 / 模塊名.函數名() 模塊名.類名() # 模塊名.變量名 print(day09.model1.g_num) print(day09.model2.gl_str) # 模塊名.函數名() tom = day09.model1.Cat() tom.eat() # 模塊名.類名() ``` </details> <br /> ``` 6.注意: from ... import導入模塊中工具(全局變量,函數,類) 格式: from 模塊名 import 工具名 如果工具名相同,后導入的工具名會覆蓋之前導入的工具名 解決辦法:用as給工具名起新的別名 7.還可以使用from ... import * 導入模塊中工具 這種方式可以將模塊中所有的全局變量,函數,類都作為工具導入 注意: 不推薦使用,因為函數重名并沒有任何的提示,出現問題不好排查 導入模塊的兩種方式: 1. import 模塊名 特點:將模塊中所有的全局變量,函數,類全部導入 訪問方式:模塊名.全局變量 模塊名.函數() 模塊名.類名() 2.from 模塊名 import 全局變量/函數/類名 特點:將所需要的全局變量/函數/類名導入 訪問方式:直接使用 全局變量名/函數()/類名() 模塊的搜索順序: 1.導入模塊時,先在當前目錄下查找,如果查找到了,就導入 2.如果當前目錄下沒有找到模塊,則導入系統模塊 3.可以使用__file__屬性查看模塊的路徑,使用方式:模塊名.__file__ 4.在開發時,給文件起名,不要和系統的模塊文件名相同 ``` <details> <summary>03_使用from...import方式導入.py</summary> ``` # 03_使用from...import方式導入 # 導入 from 模塊名 import 工具名 from day09.model1 import g_num from day09.model1 import func from day09.model1 import Cat # 不需要使用 模塊名. 方式 直接使用工具 print(g_num) # 直接使用函數 func() # 直接使用類名 創建對象 tom = Cat() tom.eat() ``` </details> <br /> <details> <summary>04_使用from...import方式導入.py</summary> ``` # 04_使用from...import方式導入 # 導入 from 模塊名 import 工具名 如果有同名的工具,后面的工具名會覆蓋前面的 # 解決辦法 使用as給工具起別名 from day09.model1 import func from day09.model2 import func as func02 # 直接使用函數 func() func02() ``` </details> <br /> ### **__name__內置屬性** ``` 1.__name__內置屬性可以做到,模塊代碼在測試情況下執行,而在被導入情況下不會執行 2.如果在當前文件中直接打印__name__內置屬性,則直接輸出字符串__main__ 3.如果當前文件被當做模塊導入,在導入的文件中直接運行時,則__name__內置屬性 輸出的就是當前被導入的模塊名 4.如果要做到代碼在測試情況下執行,而不會在導入情況下執行, 要在當前文件中添加i條件判斷 if __name__ == "__main__": ``` <details> <summary>model3.py</summary> ``` # model3.py # 當前python文件自己運行 __name__ 中是字符串 __main__ # 當前python文件被別人導入,__name__中是字符串 model3.py print("__name__:", __name__) def mutiple_table(): '''for循環定義九九乘法表''' for i in range(1, 10): for j in range(1, 1 + i): print("%d * %d = %d\t" % (j, i, j * i), end="") print("") if __name__ == "__mian__": print("當前python文件可以被當做模塊導入") print("===========111===========") mutiple_table() ``` </details> <br /> ### **包:** ``` 1.包是包含很多模塊的特殊的目錄 2.包中包含__init__.py文件 3.我們可以把包直接給調用者,調用者導入包后,可以獲取到包中所有的模塊 導入包的方式: import 包名 4.創建包的兩種方式: ① 在 PyCharm中新建一個文件夾,在文件夾新建文件__init__.py ② 在 PyCharm中可以直接新建 Python Package 5.如果想要把包給其它開發者導入使用, __init__.py中指定對外界提供的模塊列表 需要在__init__.py文件中添加 from . import 模塊名 6.導入包方式: ① import 包名 import 包名.模塊名 ②from 包名 import 模塊名 from 包名.模塊名 import 函數名/類名 ``` 示例: ``` # 1.import 包名 import message # 2.from 包名 import 模塊名 from message import send_message from message import receive_message # 包名.模塊名.函數名() message.send_message.send() # 模塊名.函數名() receive_message.receive() ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看