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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 案例剖析 ## 1\. 捕獲異常 try...except... 看如下示例: ~~~ try: print('-----test--1---') open('123.txt','r') print('-----test--2---') except IOError: pass ~~~ 運行結果: :-: ![](https://img.kancloud.cn/59/48/59481e32dc159e3f30704ee811ea888f_272x56.png) 說明: * 此程序看不到任何錯誤,因為用except 捕獲到了IOError異常,并添加了處理的方法 * pass 表示實現了相應的實現,但什么也不做;如果把pass改為print語句,那么就會輸出其他信息 小總結: * ![](https://img.kancloud.cn/c6/a5/c6a56055d73db2ddaf2a9b7c7d70317a_715x197.png) * 把可能出現問題的代碼,放在try中 * 把處理異常的代碼,放在except中 ## 2\. except捕獲多個異常 看如下示例: ~~~ try: print(num) except IOError: print('產生錯誤了') ~~~ 運行結果如下: :-: ![](https://img.kancloud.cn/ad/08/ad089960f21f92afd00b402055096274_808x124.png) 想一想: > 上例程序,已經使用except來捕獲異常了,為什么還會看到錯誤的信息提示? 答: > except捕獲的錯誤類型是IOError,而此時程序產生的異常為 NameError ,所以except沒有生效 修改后的代碼為: ~~~ try: print(num) except NameError: print('產生錯誤了') ~~~ 運行結果如下: :-: ![](https://img.kancloud.cn/a4/40/a440ef9ff51a180add597a94fa8ea534_148x53.png) #### 實際開發中,捕獲多個異常的方式,如下: ~~~ #coding=utf-8 try: print('-----test--1---') open('123.txt','r') # 如果123.txt文件不存在,那么會產生 IOError 異常 print('-----test--2---') print(num)# 如果num變量沒有定義,那么會產生 NameError 異常 except (IOError,NameError): #如果想通過一次except捕獲到多個異常可以用一個元組的方式 ~~~ ### 注意: * 當捕獲多個異常時,可以把要捕獲的異常的名字,放到except 后,并使用元組的方式僅進行存儲 ## 3\. 獲取異常的信息描述 :-: ![](https://img.kancloud.cn/fe/de/fedee1a3e37bbc2a41d8c1da84089f12_710x122.png) :-: ![](https://img.kancloud.cn/ac/c6/acc6f90b2417a2f7193c11897f7bd583_783x136.png) ## 4\. 捕獲所有異常 :-: ![](https://img.kancloud.cn/d3/7a/d37a226f396e3b334a87ff679a6ed661_569x109.png) :-: ![](https://img.kancloud.cn/0c/45/0c455fe0f9ef3b2f0c416aee318b0717_654x144.png) ## 5\. else 咱們應該對`else`并不陌生,在if中,它的作用是當條件不滿足時執行的實行;同樣在try...except...中也是如此,即如果沒有捕獲到異常,那么就執行else中的事情 ~~~ try: num = 100 print num except NameError as errorMsg: print('產生錯誤了:%s'%errorMsg) else: print('沒有捕獲到異常,真高興') ~~~ 運行結果如下: :-: ![](https://img.kancloud.cn/a5/df/a5df15ddbecc28dd42f963e857344cfa_222x60.png) ## 6\. try...finally... try...finally...語句用來表達這樣的情況: > 在程序中,如果一個段代碼必須要執行,即無論異常是否產生都要執行,那么此時就需要使用finally。 比如文件關閉,釋放鎖,把數據庫連接返還給連接池等 demo: ~~~ import time try: f = open('test.txt') try: while True: content = f.readline() if len(content) == 0: break time.sleep(2) print(content) except: #如果在讀取文件的過程中,產生了異常,那么就會捕獲到 #比如 按下了 ctrl+c pass finally: f.close() print('關閉文件') except: print("沒有這個文件") ~~~ 說明: > test.txt文件中每一行數據打印,但是我有意在每打印一行之前用time.sleep方法暫停2秒鐘。這樣做的原因是讓程序運行得慢一些。在程序運行的時候,按Ctrl+c中斷(取消)程序。 > > 我們可以觀察到KeyboardInterrupt異常被觸發,程序退出。但是在程序退出之前,finally從句仍然被執行,把文件關閉。
                  <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>

                              哎呀哎呀视频在线观看