<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ## 一 什么是異常 異常就是程序運行時發生錯誤的信號(在程序出現錯誤時,則會產生一個異常,若程序沒有處理它,則會拋出該異常,程序的運行也隨之終止),在python中,**錯誤分成兩種** 1. 語法錯誤(這種錯誤,根本過不了python解釋器的語法檢測,必須在程序執行前就改正) ~~~ #語法錯誤示范一 if #語法錯誤示范二 def test: pass #語法錯誤示范三 class Foo pass #語法錯誤示范四 print(haha) ~~~ 2. 邏輯錯誤 ~~~ #TypeError:int類型不可迭代 for i in 3: pass #ValueError num=input(">>: ") #輸入hello int(num) #NameError aaa #IndexError l=['egon','aa'] l[3] #KeyError dic={'name':'egon'} dic['age'] #AttributeError class Foo:pass Foo.x #ZeroDivisionError:無法完成計算 res1=1/0 res2=1+'str' ~~~ ## 二 常見異常解釋 在python中不同的異常可以用不同的類型(python中統一了類與類型,類型即類)去標識,一個異常標識一種錯誤 | 異常代號 | 異常解釋 | | --- | --- | | AttributeError | 試圖訪問一個對象沒有的屬性形,比如foo.x,但是foo沒有屬性x| | IOError | 輸入/輸出異常;基本上是無法打開文件| | ImportError | 無法引入模塊或包;基本上是路徑問題或名稱錯誤| | IndentationError | 語法錯誤(的子類) ;代碼沒有正確對齊| | IndexError | 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]| | KeyError | 試圖訪問字典里不存在的鍵| | KeyboardInterrupt | Ctrl+C被按下| | NameError | 使用一個還未被賦予對象的變量| | SyntaxError | Python代碼非法,代碼不能編譯(語法錯誤)| | TypeError | 傳入對象類型與要求的不符合| | UnboundLocalError | 試圖訪問一個還未被設置的局部變量,基本上是由于另有一個同名的全局變量,導致你以為正在訪問它| | ValueError | 傳入一個調用者不期望的值,即使值的類型是正確的| ## 三 異常處理 為了保證程序的健壯性與容錯性,即在遇到錯誤時程序不會崩潰,我們需要對異常進行處理, ### 可預知的錯誤 **如果錯誤發生的條件是可預知的,我們需要用if進行處理:在錯誤發生之前進行預防** ~~~ AGE=10 while True: age=input('>>: ').strip() if age.isdigit(): #只有在age為字符串形式的整數時,下列代碼才不會出錯,該條件是可預知的 age=int(age) if age == AGE: print('you got it') break ~~~ ### 不可預知的錯誤 **如果錯誤發生的條件是不可預知的,則需要用到try...except:在錯誤發生之后進行處理** ~~~ #基本語法為 try: 被檢測的代碼塊 except 異常類型: try中一旦檢測到異常,就執行這個位置的邏輯 #舉例 try: f=open('a.txt') g=(line.strip() for line in f) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) except StopIteration: f.close() ~~~ ## 四 try..except...詳細用法 ### **指定異常類型** 異常類只能用來處理指定的異常情況,如果非指定異常則無法處理 1. 單分支 ~~~ s1 = 'hello' try: int(s1) except IndexError as e: # 未捕獲到異常,程序直接報錯 print e ~~~ 2. 多分支 ~~~ s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) ~~~ ### **萬能異常Exception** 可以使用Exceptios來代表所有的異常情況,即遇到任何異常都執行后面的程序 1. 單分支 ~~~ s1 = 'hello' try: int(s1) except Exception as e: print(e) ~~~ 2. 多分支 ~~~ s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except Exception as e: print(e) ~~~ ### **else和finally語句** try異常處理語句后面,還可以esle和finally語句,作用分別如下 * else: try內代碼塊沒有異常則執行,即異常沒有被觸發是執行 * finally: 無論異常是否被觸發,都會執行模塊,通常是進行清理工作 用法舉例: ~~~ s1 = 'hello' try: int(s1) except IndexError as e: print(e) else: print('try內代碼塊沒有異常則執行我') finally: print('無論異常與否,都會執行該模塊,通常是進行清理工作') ~~~ ### **主動觸發異常** 程序判斷過程中,某些條件下需要手動拋出異常,可以通過raise語句來主動觸發異常 ~~~ name='noahs' if name != 'noah': raise ValueError('值錯誤') ~~~ ### 自定義異常 可以通過類的方式自定義異常類型 ~~~ class EgonException(BaseException): def __init__(self,msg): self.msg=msg def __str__(self): return self.msg try: raise EgonException('類型錯誤') except EgonException as e: print(e) ~~~ ### 斷言:assert 條件 assert就相當于一個條件判斷,判斷條件是否滿足,不滿足的的話就拋出異常,如: ~~~ info={} info['name']='noah' assert 'name' in info #不會拋出異常 assert 'age' in info #會拋出異常 ~~~ ## 五 總結try..except 1:把錯誤處理和真正的工作分開來 2:代碼更易組織,更清晰,復雜的工作任務更容易實現; 3:毫無疑問,更安全了,不至于由于一些小的疏忽而使程序意外崩潰了;
                  <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>

                              哎呀哎呀视频在线观看