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

歡迎訪問 生活随笔!

生活随笔

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

python

Python基础教程【读书笔记】 - 2016/7/5

發布時間:2025/3/21 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python基础教程【读书笔记】 - 2016/7/5 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

希望通過博客園持續的更新,分享和記錄Python基礎知識到高級應用的點點滴滴!

第三波:第8章 ?異常

[總覽]學習如何創建和引發自定義的異常,以及處理異常的各種方法。

  為了能夠處理異常事件,可以再所有可能發生這類事件的地方都使用條件語句,但是這么做可能不僅會沒效率和不靈活,而且還會讓程序難以閱讀。Python的異常對象提供了非常強大的替代解決方案。

[8.1] 什么是異常

  Python用異常對象(exception object)來表示異常情況。遇到錯誤后,會引發異常。如果異常對象并未被處理或捕捉,程序就會用所謂的回溯(Traceback,一種錯誤信息)終止執行。

  事實上,每個異常都是一些類的實例,這些實例可以被引發,并且可以用多種方法進行捕捉,使得程序可以捉住錯誤并且對其進行處理,而不是讓整個程序失敗。

[8.2] 按自己的方式出錯

  異??梢栽谀承〇|西出錯時自動引發。先學習如何引發異常---甚至創建自己的異常類型。


[8.2.1] raise語句

  為了引發異常,可以使用一個類(應該是Exception的子類)或者實例參數調用raise語句。使用類時沒程序會自動創建實例。如下使用內建的Exception異常類:

  raise Exception

  raise Exception('Hyperdrive overload')

  第一個例子raise Exception引發一個沒有任何有關錯誤信息的普通異常,后一個例子中,則添加了一些hyperdive overload錯誤信息。

  內建的異常類有很多,內建異常都可以再exception模塊中找到。使用dir函數列出模塊的內容:

  import exception

  dir(exception)

  所有這些異常都可以用在raise語句中:

  raise ArithmeticError

表8-1 一些內建異常

  類名                  描述

  Exception               所有異常的基類

  AttributeError             ?特性引用或賦值失敗時引發

  IOError                試圖打開不存在文件時引發

  IndexError               在使用序列中不存在的索引時引發

  KeyError                在使用映射中不存在的鍵時引發

  NameError               在找不到名字(變量)時引發

  SyntaxError              ?在代碼為錯誤形式時引發

  TypeError               ?在內建操作或者函數應用于錯誤類型的對象時引發

  ValueError               在內建操作或者函數應用于正確類型的對象,但該對象使用不合適的值時引發?

  ZeroDivisionError           在除法或者模除操作的第二個參數為0時引發

[8.2.2] 自定義異常類

  有些時候創建自己的異常類。那么如何創建自己的異常類呢?只是要確保從Exception類繼承(不管是間接的或者是直接的,也就是說繼承其他的內建異常類也是可以的),編寫一個自定義異常類基本上如下:

  class SomeCustomException(Exception):pass

[8.3] 捕捉異常

  關于異常最有意思的地方就是可以處理它們(通常叫做誘捕或者捕捉異常),可以使用try/except來實現。

  為了捕捉異常并且做出一些錯誤處理,如下:

  try:

    x=input('Enter the first number:')

    y=input('Enter the second number:')

    print x/y

  except ZeroDivisionError:

    print "The second number can't be zero!"

  看起來用if語句檢查y值會更簡單一些,但是如果需要給程序加入更多除法,那么就得給每個除法加個if語句。而使用try/except的話只需要一個錯誤處理器。

  如果捕捉到了有慈航,但是又想重新引發它(也就是說要傳遞異常),那么可以調用不帶參數的raise。

  class MuffledCalculator:

    muffled=False

    def calc(self,expr):

      try:

        return eval(expr)

      except ZeroDivisionError:

        if self.muffled:

          print 'Division by zero is illegal'

        else:

          raise

[8.4] 不止一個except子句

  可以再同一個try/except語句后面加上另一個except子句?!?/p>

  try:

    x=input('Enter the first number:')

    y=input('Enter the second number:')

    print x/y

  except ZeroDivisionError:

    print "The second number can't be zero!"

  except TypeError:

    print "That wan't a number ,was it?"

  應該注意到,異常處理并不會將搞亂原來的代碼,而增加一大堆if語句檢查可能的錯誤情況會讓代碼相當難度。

[8.5]?用一個塊捕捉兩個異常

?  如果需要用一個塊捕捉多個類型異常,那么可以將它們作為元組列出,像下面這樣:

  try:

    x=input('Enter the first number:')

    y=input('Enter the second number:')

    print x/y

  except (ZeroDivisionError,TypeError,NameError):

    print 'Your number were bogus...'

  注意except子句中異常對象外面的圓括號很重要。忽略它們是一種常見的錯誤。

[8.6] 捕捉對象

  如果希望在except子句訪問異常對象本身,可以使用兩個參數。注意,就算捕捉到多個異常,也只需向except子句提供一個參數。如果想讓程序繼續運行,但是又因為某種原因想記錄下錯誤,這個功能就很有用。

  try:

    x=input('Enter the first number:')

    y=input('Enter the second number:')

    print x/y

  except (ZeroDivisionError,TypeError),e:

    print e

[8.7] 真正的全捕捉

  如果真的想用一段代碼捕捉所有異常,那么可以在except子句中忽略所有的異常類:

  try:

    ......

  except:

    print 'Something wrong happened...'

  這樣捕捉所有異常時危險的,因為它會隱藏所有程序員未想到并未做好準備處理的錯誤。

[8.8] 萬事大吉

  可以像對條件和循環語句那樣,給try/except語句價格else子句:

  try:

    print 'A simple task'

  except:

    print 'What? Something went wrong!'

  else:

    print 'Ah...It went as planned!'

[8.9] 最后......

  最后是finally子句,它可以用來在可能的異常后進行清理,它和try子句聯合使用:

  x=None

  try:

    x=1/0

  finally:

    print 'Cleaning up...'

    del x

  上面的代碼中,finally子句肯定會被執行,不管try子句中是否發生異常。因為使用del語句刪除一個變量是非常不負責的清理手段,所以finally子句用于關閉文件或者網絡套接字時會非常有用。還可以在同一條語句中組合使用try、except、finally和else。

  try:

    1/0

  except NameError:

    print 'Unknown variable'

  else:

    print "That went well!"

  finally:

    print "Cleaning up....."

[8.10] 異常和函數

  異常和函數能很自然地一起工作。如果異常在函數內引發而不被處理,它就會傳播至函數調用的地方。如果在那里也沒有處理異常,它就會繼續傳播,一直到達主程序(全局作用域)。如果那里沒有異常處理程序,程序會帶著堆棧跟蹤中止。

[8.11] 異常之禪

  異常處理并不是很復雜。如果知道某段代碼可能會導致某種異常,而又不希望程序以堆棧跟蹤的形式終止,那么久根據需要添加try/except或者try/finally語句進行處理。

[8.12] 小結

  異常對象:異常情況可以用異常對象表示。

  警告:警告類似于異常,但是一般來說僅僅打印錯誤信息。

  引發異常:可以使用raise語句引發異常。它接受異常類或者異常實例作為參數,還能提供兩個參數(異常和錯誤信息)。

  自定義異常類:用繼承Exception類的方法可以創建自己的異常類。

  捕捉異常:使用try語句的except子句捕捉異常。異??梢苑旁谠M中以實現多個異常的制定。如果給except提供兩個參數,第2個參數就會綁定到異常對象上。同樣,在一個try/except語句中能包含多個except子句,用來分別處理不同的異常。

  else子句:如果主try塊中沒有引發異常,else子句就會被執行。

  finally:如果需要確保某些代碼不管是否有異常引發都要執行,那么這些代碼可以防止在finally子句中。

  異常和函數:在函數內引發異常時,它就會被傳播到函數調用的地方。

?

轉載于:https://www.cnblogs.com/pythonMLer/p/5642161.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Python基础教程【读书笔记】 - 2016/7/5的全部內容,希望文章能夠幫你解決所遇到的問題。

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