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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 處理異常 # 處理異常 我們還沒有談到`__exit__`方法的這三個參數:`type`, `value`和`traceback`。 在第4步和第6步之間,如果發生異常,Python會將異常的`type`,`value`和`traceback`傳遞到`__exit__`方法。 它讓`__exit__`方法來決定如何關閉文件以及是否需要其他步驟。在我們的案例中,我們并沒有注意它們。 那如果我們的文件對象拋出一個異常呢?萬一我們嘗試訪問文件對象的一個不支持的方法。舉個例子: ~~~ with File('demo.txt', 'w') as opened_file: opened_file.undefined_function('Hola!') ~~~ 我們來列一下,當異常發生時,`with`語句會采取哪些步驟。 1. 它把異常的`type`,`value`和`traceback`傳遞給`__exit__`方法 1. 它讓`__exit__`方法來處理異常 1. 如果`__exit__`返回的是True,那么這個異常就被優雅地處理了。 1. 如果`__exit__`返回的是True以外的任何東西,那么這個異常將被`with`語句拋出。 在我們的案例中,`__exit__`方法返回的是`None`(如果沒有`return`語句那么方法會返回`None`)。因此,`with`語句拋出了那個異常。 ~~~ Traceback (most recent call last): File "<stdin>", line 2, in <module> AttributeError: 'file' object has no attribute 'undefined_function' ~~~ 我們嘗試下在`__exit__`方法中處理異常: ~~~ class File(object): def __init__(self, file_name, method): self.file_obj = open(file_name, method) def __enter__(self): return self.file_obj def __exit__(self, type, value, traceback): print("Exception has been handled") self.file_obj.close() return True with File('demo.txt', 'w') as opened_file: opened_file.undefined_function() # Output: Exception has been handled ~~~ 我們的`__exit__`方法返回了`True`,因此沒有異常會被`with`語句拋出。 這還不是實現上下文管理器的唯一方式。還有一種方式,我們會在下一節中一起看看。
                  <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>

                              哎呀哎呀视频在线观看