最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

python錯誤、異常和程序調(diào)試的方法介紹(附代碼)

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:20:21
文檔

python錯誤、異常和程序調(diào)試的方法介紹(附代碼)

python錯誤、異常和程序調(diào)試的方法介紹(附代碼):本篇文章給大家?guī)淼膬?nèi)容是關(guān)于python錯誤、異常和程序調(diào)試的方法介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對你有所幫助。異常是Python程序在運(yùn)行過程中引發(fā)的錯誤,如果程序中引發(fā)了未進(jìn)行處理的異常,程序就會由于異常而終止運(yùn)行
推薦度:
導(dǎo)讀python錯誤、異常和程序調(diào)試的方法介紹(附代碼):本篇文章給大家?guī)淼膬?nèi)容是關(guān)于python錯誤、異常和程序調(diào)試的方法介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對你有所幫助。異常是Python程序在運(yùn)行過程中引發(fā)的錯誤,如果程序中引發(fā)了未進(jìn)行處理的異常,程序就會由于異常而終止運(yùn)行

本篇文章給大家?guī)淼膬?nèi)容是關(guān)于python錯誤、異常和程序調(diào)試的方法介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對你有所幫助。

異常是Python程序在運(yùn)行過程中引發(fā)的錯誤,如果程序中引發(fā)了未進(jìn)行處理的異常,程序就會由于異常而終止運(yùn)行,只有為程序添加異常處理,才能使程序更“健壯”。

Python對異常的處理,有它自己的語法形式,掌握如何在Python中處理異常和進(jìn)行程序調(diào)試,主要內(nèi)容有:

  • 列表項(xiàng)目
  • 列表項(xiàng)目
  • 語法錯誤;
  • 異常的概念;
  • 用try語句捕獲異常;
  • 常見異常的處理;
  • 自定義異常;
  • 使用pdb調(diào)試Python程序。
  • 7.1 語法錯誤

    1.拼寫錯誤

    即Python語言中的關(guān)鍵字寫錯,變量名、函數(shù)名拼寫錯誤等。

    關(guān)鍵字拼寫錯誤時(shí)會提示SyntaxError(語法錯誤),而變量名、函數(shù)名拼寫錯誤會在運(yùn)行時(shí)給出NameError的錯誤提示.

    2.腳本程序不符合Python的語法規(guī)范

    例如如少了括號,冒號等符號,以及表達(dá)式書寫錯誤等。

    3.縮進(jìn)錯誤

    因?yàn)镻ython語法規(guī)定,以縮進(jìn)作為程序的語法之一,這應(yīng)該是Python語言獨(dú)特的一面。一般來說Python標(biāo)準(zhǔn)的縮進(jìn)是以4個空格作為一個縮進(jìn)。當(dāng)然,你可以依據(jù)自己的習(xí)慣,使用Tab也可以。但同一個程序或項(xiàng)目中應(yīng)該統(tǒng)一使用同一種縮進(jìn)風(fēng)格。

    7.2 異常的處理

    異常是Python程序在運(yùn)行過程中引發(fā)的錯誤。如果程序中引發(fā)了未進(jìn)行處理的異常,腳本就會由于異常而終止運(yùn)行。只有在程序中捕獲這些異常,并進(jìn)行相關(guān)的處理,才能使程序不會中斷運(yùn)行。

    7.2.1 異常處理的基本語法

    Python中使用try語句來處理異常,和Python中其他語句一樣,try語句也要使用縮進(jìn)結(jié)構(gòu),try語句也有一個可選的else語句塊。一般的try語句基本形式如下。

    try:
       <語句(塊)> #可能產(chǎn)生異常的語句(塊)
      except <異常名1>: #要處理的異常
       <語句(塊)> #異常處理語句
      except <異常名2>: #要處理的異常
       <語句(塊)> #異常處理語句
      else:
       <語句(塊)> #未觸發(fā)異常,則執(zhí)行該語句(塊)
      finally:
       <語句(塊)> #始終執(zhí)行該語,一般為了達(dá)到釋放資源等目的
      

    在實(shí)際應(yīng)用中可以根據(jù)程序的需要而使用部分語句,常見的形式有:

    形式一:

    try:
       <語句(塊)>
      except <異常名1>:
       <語句(塊)>
      

    舉例:

    def testTry (index, flag=False):
       stulst = ["John","Jenny","Tom"]
       if flag: #flag為True時(shí),捕獲異常
       try:
       astu = stulst [index]
       except IndexError:
       print("IndexError")
       return "Try Test Finished!"
       else: #flag為False時(shí),不捕獲異常
       astu =stulst [index]
       return "No Try Test Finished!"
      print("Right params testing start...")
      print (testTry (1, True)) #不越界參數(shù),捕獲異常(正常)
      print (testTry (1, False)) #不越界參數(shù),不捕獲異常(正常)
      print("Error params testing start...")
      print (testTry (4, True)) #越界參數(shù),捕獲異常(正常)
      print (testTry (4, False)) #越界參數(shù),不捕獲異常(程序運(yùn)行會中斷)
      

    形式二: 

     try:
       <語句(塊)>
       except < 異常名1>:
       <語句(塊)>
       finally:
       <語句(塊)>
     

    舉例:

    def testTryFinally (index):
       stulst = ["John","Jenny", "Tom"]
       af = open ("my.txt", 'wt+')
       try:
       af.write(stulst[index])
       except:
       pass
       finally:
       af.close() #無論是否產(chǎn)生越界異常,都關(guān)閉文件
       print("File already had been closed!")
      print('No IndexError...')
      testTryFinally (1) #無越界異常,正常關(guān)閉文件
      print('IndexError...')
      testTryFinally (4) #有越界異常,正常關(guān)閉文件
    7.2.2 Python主要的內(nèi)置異常及其處理

    在Python中常見的異常都已經(jīng)預(yù)定義好了,在交互式環(huán)境中,用dir(__builtins__)命令,就會顯示出所有的預(yù)定義異常。

    異常名描述
    AttributeError調(diào)用不存在的方法引發(fā)的異常
    EOFError遇到文件末尾引發(fā)的異常
    ImportError導(dǎo)入模塊出錯引發(fā)的異常
    IndexError列表越界引發(fā)的異常
    IOErrorI/O操作引發(fā)的異常,如打開文件出錯等
    KeyError使用字典中不存在的關(guān)鍵字引發(fā)的異常
    NameError使用不存在的變量名引發(fā)的異常
    TabError語句塊縮進(jìn)不正確引發(fā)的異常
    ValueError搜索列表中不存在的值引發(fā)的異常
    ZeropisionError除數(shù)為零引發(fā)的異常

    except語句主要有以下幾種用法:

    except: #捕獲所有異常;
    except <異常名>: #捕獲指定異常;
    except (異常名1,異常名2): #捕獲異常名1或者異常名2;
    except <異常名> as <數(shù)據(jù)>: #捕獲指定異常及其附加的數(shù)據(jù);
    except(異常名1,異常名2)as <數(shù)據(jù)>: #捕獲異常名1或者異常名2及異常的附加數(shù)據(jù)。

    7.3 手工拋出異常

    為了程序的需要,程序員還可以自定義新的異常類型,例如對用戶輸入文本的長度有要求,則可以使用raise引發(fā)異常,以確保文本輸入的長度符合要求。

    7.3.1 用raise手工拋出異常

    使用raise引發(fā)異常十分簡單,raise有以下幾種使用方式。

      raise 異常名
      raise 異常名,附加數(shù)據(jù)
      raise 類名
    使用raise可以拋出各種預(yù)定的異常,即使程序在運(yùn)行時(shí)根本不會引發(fā)該異常。

    def testRaise2():
     for i in range (5):
     try:
     if i==2: #i==2拋出NameError異常
     raise NameError
     except NameError:
     print('Raise a NameError!')
     print (i)
     print('end...')
    
    testRaise2 ()

    運(yùn)行結(jié)果:

    0
    1
    Raise a NameError!
    2
    3
    4
    end...

    7.3.2 assert語句

    assert語句的一般形式如下。

    assert <條件測試>, <異常附加數(shù)據(jù)> #其中異常附加數(shù)據(jù)是可選的

    assert語句是簡化的raise語句,它引發(fā)異常的前提是其后面的條件測試為假。

    舉例:

    def testAssert():
       for i in range (3):
       try:
       assert i<2
       except AssertionError:
       print('Raise a AssertionError!')
       print (i)
       print('end...')
    
      testAssert()

    運(yùn)行結(jié)果:

    0
    1
    Raise a AssertionError!
    2
    end...

    assert語句一般用于在程序開發(fā)時(shí)測試代碼的有效性。比如某個變量的值必須在一定范圍內(nèi),而運(yùn)行時(shí)得到的值不符合要求,則引發(fā)該異常,對開發(fā)者予以提示。所以一般在程序開發(fā)中,不去捕獲這個異常,而是讓它中斷程序。原因是程序中已經(jīng)出現(xiàn)了問題,不應(yīng)繼續(xù)運(yùn)行。

    assert語句并不是總是運(yùn)行的,只有Python內(nèi)置的一個特殊變量__debug__為True時(shí)才運(yùn)行。要關(guān)閉程序中的assert語句就使用python-O(短畫線,后接大寫字母O)來運(yùn)行程序。

    7.3.3 自定義異常類

    在Python中定義異常類不用從基礎(chǔ)完全自己定義,只要通過繼承Exception類來創(chuàng)建自己的異常類。異常類的定義和其他類沒有區(qū)別,最簡單的自定義異常類甚至可以只繼承Exception類,類體為pass如:

    class MyError (Exception): #繼承Exception類
       pass

    如果需要異常類帶有一定的提示信息,也可以重載__init__和__str__這兩個方法?!鞠嚓P(guān)推薦:python視頻教程】

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    python錯誤、異常和程序調(diào)試的方法介紹(附代碼)

    python錯誤、異常和程序調(diào)試的方法介紹(附代碼):本篇文章給大家?guī)淼膬?nèi)容是關(guān)于python錯誤、異常和程序調(diào)試的方法介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對你有所幫助。異常是Python程序在運(yùn)行過程中引發(fā)的錯誤,如果程序中引發(fā)了未進(jìn)行處理的異常,程序就會由于異常而終止運(yùn)行
    推薦度:
    標(biāo)簽: 錯誤 代碼 程序
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top