成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

python錯(cuò)誤、異常和程序調(diào)試

Object / 940人閱讀

摘要:關(guān)鍵字拼寫(xiě)錯(cuò)誤時(shí)會(huì)提示語(yǔ)法錯(cuò)誤,而變量名函數(shù)名拼寫(xiě)錯(cuò)誤會(huì)在運(yùn)行時(shí)給出的錯(cuò)誤提示腳本程序不符合的語(yǔ)法規(guī)范例如如少了括號(hào),冒號(hào)等符號(hào),以及表達(dá)式書(shū)寫(xiě)錯(cuò)誤等。異常的處理異常是程序在運(yùn)行過(guò)程中引發(fā)的錯(cuò)誤。

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

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

列表項(xiàng)目

列表項(xiàng)目

語(yǔ)法錯(cuò)誤;

異常的概念;

用try語(yǔ)句捕獲異常;

常見(jiàn)異常的處理;

自定義異常;

使用pdb調(diào)試Python程序。

7.1 語(yǔ)法錯(cuò)誤

1.拼寫(xiě)錯(cuò)誤

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

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

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

例如如少了括號(hào),冒號(hào)等符號(hào),以及表達(dá)式書(shū)寫(xiě)錯(cuò)誤等。

3.縮進(jìn)錯(cuò)誤

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

7.2 異常的處理

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

7.2.1 異常處理的基本語(yǔ)法

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

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

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

形式一:

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



舉例:

def testTry (index, flag=False):
     stulst = ["John","Jenny","Tom"]
     if flag:                         #flag為T(mén)rue時(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)行會(huì)中斷)
  

形式二: 

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

舉例:

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

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

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

except語(yǔ)句主要有以下幾種用法

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 手工拋出異常

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

7.3.1 用raise手工拋出異常

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

  raise 異常名
  raise 異常名,附加數(shù)據(jù)
  raise 類(lèi)名
使用raise可以拋出各種預(yù)定的異常,即使程序在運(yùn)行時(shí)根本不會(huì)引發(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語(yǔ)句

assert語(yǔ)句的一般形式如下。

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

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

舉例:

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

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

7.3.3 自定義異常類(lèi)

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

class MyError (Exception):          #繼承Exception類(lèi)
     pass

如果需要異常類(lèi)帶有一定的提示信息,也可以重載__init__和__str__這兩個(gè)方法。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/43550.html

相關(guān)文章

  • 調(diào)試分析Python腳本

    摘要:調(diào)試器可幫助程序員分析完整的代碼。我們將使用標(biāo)準(zhǔn)庫(kù)中的模塊調(diào)試我們的腳本。例外是程序執(zhí)行期間發(fā)生的錯(cuò)誤。設(shè)置斷點(diǎn)并檢查堆棧幀,并列出源代碼。輸入以繼續(xù)調(diào)試。分析和計(jì)時(shí)程序分析程序意味著測(cè)量程序的執(zhí)行時(shí)間。的模塊用于分析程序。 showImg(https://segmentfault.com/img/remote/1460000018807029?w=902&h=442); 來(lái)源 | ...

    wenzi 評(píng)論0 收藏0
  • python模塊之sys

    摘要:返回的信息特定于當(dāng)前線程以及當(dāng)前堆棧幀。出于某些原因,這個(gè)值可能無(wú)法計(jì)算,將返回返回安卓版本的構(gòu)建時(shí)間,以整數(shù)表示。僅適用于安卓平臺(tái)返回解釋器的檢查間隔??刹僮鞔藢傩詫?shí)現(xiàn)強(qiáng)制重新加載模塊等。 sys模塊提供對(duì)由解釋器使用或維護(hù)的某些變量、與解釋器交互的函數(shù)的訪問(wèn)接口。 sys.abiflags 在使用標(biāo)準(zhǔn)configure腳本構(gòu)建python的POSIX系統(tǒng)上,該屬性包含了PEP 31...

    csRyan 評(píng)論0 收藏0
  • Python:Tornado 第四章:Tornado網(wǎng)站部署:第一節(jié):調(diào)試模式

    摘要:上一篇文章第三章概念及應(yīng)用第三節(jié)客戶端編程下一篇文章第四章網(wǎng)站部署第二節(jié)靜態(tài)文件之前著重講解的編程知識(shí)點(diǎn),所有之前的例子都使用最簡(jiǎn)單的啟動(dòng)方式運(yùn)行。 上一篇文章:Python:Tornado 第三章:HTML5 WebSocket概念及應(yīng)用:第三節(jié):客戶端編程下一篇文章:Python:Tornado 第四章:Tornado網(wǎng)站部署:第二節(jié):靜態(tài)文件 之前著重講解Tornado的編程知...

    desdik 評(píng)論0 收藏0
  • 開(kāi)發(fā)5分鐘,調(diào)試2小時(shí) - 該如何debug?

    摘要:但在開(kāi)發(fā)時(shí)不要使用異常處理,否則阻止了報(bào)錯(cuò)信息的發(fā)出,影響調(diào)試。的作用主要是確定程序的運(yùn)行路徑。二分查找法是一個(gè)定位問(wèn)題的技巧。 前言 幾年來(lái)我在答疑群、論壇、公眾號(hào)、知乎回答的各種問(wèn)題,沒(méi)有一萬(wàn)也有八千。其中有三分之二以上都是在幫人看報(bào)錯(cuò),幫人 debug(調(diào)試代碼) 。 可以說(shuō), 會(huì)不會(huì) debug,有沒(méi)有 debug 的意識(shí),懂不懂 debug 的技巧,是有沒(méi)有入門(mén)編程的重要標(biāo)志...

    Charles 評(píng)論0 收藏0
  • 通讀Python官方文檔之cgi

    摘要:最近添加的功能是通過(guò)表單上傳文件。腳本的輸出由兩部分組成,由一個(gè)空行分割。后者接受重復(fù)鍵值二進(jìn)制文件等。方法會(huì)返回所有為的值。進(jìn)行類(lèi)型檢查是必須的,因?yàn)闀?huì)有好事的用戶,輸入重復(fù)的鍵名。 cgi 通用網(wǎng)關(guān)接口 前驅(qū)知識(shí) 網(wǎng)關(guān)協(xié)議學(xué)習(xí):CGI、FastCGI、WSGI 簡(jiǎn)單點(diǎn)說(shuō): web服務(wù)器接受請(qǐng)求,啟動(dòng)CGI;CGI接受請(qǐng)求,處理,返回給服務(wù)器;服務(wù)器返回給用戶 cgi效率不高,每...

    lncwwn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Object

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<