91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分析Python異常處理

發布時間:2021-11-03 15:43:20 來源:億速云 閱讀:148 作者:iii 欄目:編程語言

本篇內容主要講解“分析Python異常處理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“分析Python異常處理”吧!

  “你不可能總是對的”

  甚至計算機也會有失誤的時候。當然程序員也不例外,就算是經驗豐富的碼農,也不能保證寫出來的代碼百分之百沒有任何問題(要不哪來的那么多的漏洞)。

  程序出現邏輯錯誤或者用戶輸入不合法都會引發異常,但這些一場不是致命的,不會導致程序壞死。可以利用Python提供的異常處理機制,在異常出現的時候及時捕獲,并從內部消化掉。

  那么接下來就是正確學習Python的姿勢了。

  那什么是異常呢?我們先來了解下,如果你編寫了一個異常代碼,運行后,會出現異常,代碼會停止,并顯示出一個 Traceback ,這其中就包含了有關異常的報告,舉個例子:

  #example1.py

  file_name = '不存在的文件.txt'

  f = open(file_name, 'r')

  print('輸出文件內容:')

  for line in f:

  print(line)

  這里是打開一個不存在的文件,那么這就會使代碼出現異常:

  Traceback (most recent call last):

  File "E:/PycharmProjects/untitled2/abnormal/example1.py", line 2, in

  f = open(file_name, 'r')

  FileNotFoundError: [Errno 2] No such file or directory: '隨便來個文件.txt'

  上面的例子就拋出了一個FileNotFoundError異常。

  當然了Python不可能只拋出這么一個異常,

  那Python通常會拋出那些異常呢?這里我先一一列舉出來,做個總結,讓大家先有個認識,這樣今后遇見這樣的異常時就不會感到陌生了。

  常見異常總結

  1. FileNotFoundError:找不到文件異常

  使用文件時,一種常見的問題是找不到文件:你要查找的文件可能在其他什么地方,文件名可能不正確或者這個文件根本不存在。

  上面已舉例,這里我就不再舉例了。

  2. AssertionError:斷言語句(assert)失敗

  當 assert 這個我關鍵字后面的條件為假時,程序將停止并拋出 AssertionError 異常。assert 語句一般是在測試程序的時候用于在代碼中置入檢查點:

  #example2

  my_list = ['example2']

  assert len(my_list) > 0

  my_list.pop()

  assert len(my_list) > 0

  異常:

  Traceback (most recent call last):

  File "E:/PycharmProjects/untitled2/abnormal/example.py", line 5, in

  assert len(my_list) > 0

  AssertionError

  3. AttributeError:嘗試訪問未知的對象屬性

  當試圖訪問的對象屬性不存在時拋出 AttributeError 異常:

  #example3

  my_list = []

  my_list.example3

  異常:

  Traceback (most recent call last):

  File "E:/PycharmProjects/untitled2/abnormal/example.py", line 2, in

  my_list.example3

  AttributeError: 'list' object has no attribute 'example3'

  4. IndexError:索引超出序列范圍

  在使用序列的時候就常常會遇到 IndexError 異常,原因是索引超出序列范圍的內容:

  #example4

  my_list = [1,2,3]

  x = my_list[3]

  print(x)

  異常:

  Traceback (most recent call last):

  File "E:/PycharmProjects/untitled2/abnormal/example.py", line 2, in

  x = my_list[3]

  IndexError: list index out of range

  5. KeyError:字典中查找一個不存在的關鍵字

  當試圖在字典中查找一個不存在的關鍵字時就會引發 KeyError 異常,因此建議使用 dict.get()方法:

  # example5

  my_dist = {'one':1, 'two':2, 'three':3}

  x = my_dist['one']

  print(x)

  y = my_dist['four']

  print(y)

  異常:

  1

  Traceback (most recent call last):

  File "E:/PycharmProjects/untitled2/abnormal/example.py", line 4, in

  y = my_dist['four']

  KeyError: 'four'

  6. NameError:嘗試訪問一個不存在的變量

  當嘗試訪問一個不存在的變量時,Python會拋出 NameError 異常:

  #example6

  example6

  異常:

  Traceback (most recent call last):

  File "E:/PycharmProjects/untitled2/abnormal/example.py", line 1, in

  example6

  NameError: name 'example6' is not defined

  7. OSError:操作系統產生的異常

  OSError ,顧名思義就是操作系統產生的異常,就像打開一個不存在的文件就會引發 FileNotFindError ,而這個 FileNotFindError 就是 OSError 的子類。

  例子在上面已演示過了,這里就不再重說了。

  8. SyntaxError:Python 的語法錯誤

  如果遇到 SyntaxError 是 Python 的語法錯誤,這時 Python 的代碼并不能繼續執行,應該先找到并改正錯誤:

  #example8

  print 'I am example8'

  異常:

  File "E:/PycharmProjects/untitled2/abnormal/example.py", line 1

  print 'I am example8'

  ^

  SyntaxError: Missing parentheses in call to 'print'. Did you mean print('I am example8')?

  9. TypeError:不同類型間的無效操作

  類型不同的對象是不能互相進行計算的,否則會拋出 TypeError 異常:

  #example9

  x = 1 + '1'

  print(x)

  異常:

  Traceback (most recent call last):

  File "E:/PycharmProjects/untitled2/abnormal/example.py", line 1, in

  x = 1 + '1'

  TypeError: unsupported operand type(s) for +: 'int' and 'str'

  10. ZeroDivisionError:除數為零

  地球人都知道除數不為零,所以除以零就會引發 ZeroDivisionError 異常:

  #example10

  x = 365 / 0

  print(x)

  異常:

  Traceback (most recent call last):

  File "E:/PycharmProjects/untitled2/abnormal/example.py", line 1, in

  x = 365 / 0

  ZeroDivisionError: division by zero

  現在我們已經講完常見的異常類型了,那接下來就是進入正題,該如何處理異常了

  一、 try—except 語句

  1. 語法結構:

  try:

  檢測內容

  except Exception [as reason]:

  出現異常(Exception)后的處理代碼

  2. 簡單舉個例子:

  #example

  f = open('不存在的文檔.txt')

  print(f.read())

  f.close()

  當上面的例子中’不存在的文檔.txt‘,這個文檔不存在時,Python就會報錯出現異常:

  Traceback (most recent call last):

  File "E:/PycharmProjects/untitled2/abnormal/example.py", line 1, in

  f = open('不存在的文檔.txt')

  FileNotFoundError: [Errno 2] No such file or directory: '不存在的文檔.txt'

  這時為了解決異常問題,我們可以這么修改代碼:

  try:

  f = open('不存在的文檔.txt')

  print(f.read())

  f.close()

  except OSError:

  print('文件打開的時候出錯啦T_T')

  運行一下試試:

  文件打開的時候出錯啦T_T

  注:這里我之所以用 OSError 而沒用 FileNotFindError 是因為導致 OSError 異常的原因有很多(如 FileNotFindError,FileExistsError,PermissionError 等)

  當然了,如果你更在意出錯的具體內容,這里可以用 as 把具體的錯誤信息給打印出來:

  try:

  f = open('不存在的文檔.txt')

  print(f.read())

  f.close()

  except OSError as reason:

  print('文件打開的時候出錯啦T_T\n 錯誤原因是:' + str(reason))

  運行后,結果為:

  文件打開的時候出錯啦T_T

  錯誤原因是:[Errno 2] No such file or directory: '不存在的文檔.txt'

  3. 針對不同異常設置多個 except

  一個 try 語句可以和多個 except 語句搭配(缺點是它只會返回第一個發現的異常):

  #example

  try:

  x = 1 + '1'

  f = open('不存在的文檔.txt')

  print(f.read())

  f.close()

  except OSError as reason:

  print('文件打開的時候出錯啦T_T\n 錯誤原因是:' + str(reason))

  except TypeError as reason:

  print('類型出錯啦T_T\n 錯誤原因是:' + str(reason))

  運行后,結果為:

  類型出錯啦T_T

  錯誤原因是:unsupported operand type(s) for +: 'int' and 'str'

  4. 對多個異常統一處理

  except 后面還可以跟著多個異常,然后對這些異常進行統一的處理(同樣缺點是它只會返回第一個發現的異常):

  try:

  int('abc')

  x = 1 + '1'

  f = open('不存在的文檔.txt')

  print(f.read())

  f.close()

  except (OSError, TypeError, ValueError) as reason:

  print('出錯啦T_T\n 錯誤原因是:' + str(reason))

  運行后,結果為:

  出錯啦T_T鄭州哪個醫院做人流好 http://www.hnmt120.com/

  錯誤原因是:invalid literal for int() with base 10: 'abc'

  5. 捕獲所有異常

  如果你無法判斷要對哪一類型的異常進行處理,只是希望在 try 語句中一旦出現異常,可以返回一個看得懂的異常錯誤提醒,那么可以這么做:

  try:

  int('abc')

  x = 1 + '1'

  f = open('不存在的文檔.txt')

  print(f.read())

  f.close()

  except:

  print('出錯啦T_T')

  運行后,結果為:

  出錯啦T_T

  注: 不過通常不建議這么做,因為它會隱藏所有程序未想到并且未做好處理準備的錯誤。

  二、 try—finally 語句

  如果確定存在一個名為 ’不存在的文檔.txt‘ 的文件,open() 函數正常返回文件對象,但異常卻發生在成功打開文件后的 x = 1 + ’1‘ 語句上。此時 Python 將直接跳到 except 語句上,也就是說,文件打開了,但關閉文件的命令卻被跳過了,導致沒有關閉文件。

  try:

  f = open('不存在的文檔.txt')

  print(f.read())

  x = 1 + '1'

  f.close()

  except:

  print('出錯啦T_T')

  因此出現了,為了實現像這種”就算出現異常,但也并不的不執行的收尾工作(如在程序崩潰前保存用戶文檔)“,引入了 finally 來擴展 try:

  try:

  f = open('不存在的文檔.txt')

  print(f.read())

  x = 1 + '1'

  except:

  print('出錯啦T_T')

  finally:

  f.close()

  注:如果 try 語句塊中沒有出現任何異常,會跳過 except 語句塊執行 finally 語句塊的內容。如果出現了異常,則會先執行 except 語句塊的內容再執行 finally 語句塊的內容。總之,finally 語句塊中的內容就是確保無論如何都將被執行的內容。

  三、 try—except 擴展 (出現異常時一聲不吭)

  如果我們想在出現異常時,當作什么也沒發生,不做任何處理,可以使用 pass 語句來實現。

  try:

  f = open('不存在的文檔.txt')

  print(f.read())

  except:

  pass

  運行后,結果為:

  Process finished with exit code 0

  四、 else 語句搭配

  else 語句還能與異常處理進行搭配,實現方法與循環語句搭配差不多:只要 try 語句塊里沒有出現任何異常,那么就會執行 else 語句塊里的內容。

  try:

  int(4.5)

  except ValueError as reason:

  print('出錯啦T_T: '+ str(reason))

  else:

  print('沒有任何異常!')

  運行后,結果為:

  沒有任何異常!

  Process finished with exit code 0

  五、 簡潔的 with 語句

  你們在玩文件的時候可能都見過 with 語句 ,但是你們都理解為什么要帶著它嗎?

  你們可能覺得,既要打開文件又要關閉文件,還要關注異常處理,有點麻煩,所以 Python 提供了一個 with 語句,利用這個語句抽象出文件操作中頻繁使用的 try/except/finally 相關的細節。對文件操作使用 with 語句,將大大減少代碼量,而且再也不用擔心出現文件打開了忘記關閉的問題了 ( with 會自動幫助關閉文件)。

  舉例:

  try:

  f = open('不存在的文檔.txt', 'w')

  print(f.read())

  except OSError as reason:

  print('出錯啦T_T: ' + str(reason))

  finally:

  f.close()

  使用 with 語句 ,可以改成以下這樣:

  try:

  with open('不存在的文檔.txt', 'w') as f:

  print(f.read())

  except OSError as reason:

  print('出錯啦T_T: ' + str(reason))

  是不是覺得很方便呢,有了 with 語句,就在也不用擔心忘記關閉文件了。

到此,相信大家對“分析Python異常處理”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青州市| 商水县| 开平市| 五莲县| 仁化县| 十堰市| 武汉市| 远安县| 静安区| 启东市| SHOW| 汶川县| 菏泽市| 阿合奇县| 西林县| 靖宇县| 喀什市| 连云港市| 镇坪县| 上犹县| 兰州市| 萝北县| 浏阳市| 剑川县| 禄劝| 龙胜| 金昌市| 和平区| 和田市| 从江县| 石首市| 闽侯县| 苏州市| 西城区| 陕西省| 百色市| 南皮县| 武隆县| 鄂尔多斯市| 墨脱县| 灌南县|