国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python基礎之(九)錯誤和異常

yimo / 1092人閱讀

摘要:另一種常見錯誤是邏輯錯誤。當檢測到一個錯誤時,解釋器就無法繼續(xù)執(zhí)行下去,于是拋出提示信息,即為異常。

錯誤
>>> for i in range(10)
 File "", line 1
   for i in range(10)
                    ^
SyntaxError: invalid syntax

上面那句話因為缺少冒號:,導致解釋器無法解釋,于是報錯。這個報錯行為是由Python的語法分析器完成的,并且檢測到了錯誤所在文件和行號(File "", line 1),還以向上箭頭^標識錯誤位置(后面缺少:),最后顯示錯誤類型。

另一種常見錯誤是邏輯錯誤。邏輯錯誤可能是由于不完整或者不合法的輸入導致,也可能是無法生成、計算等,或者是其它邏輯問題。

當Python檢測到一個錯誤時,解釋器就無法繼續(xù)執(zhí)行下去,于是拋出提示信息,即為異常。

異常

下表中列出常見的異常

異常 描述
NameError 嘗試訪問一個沒有申明的變量
ZeroDivisionError 除數(shù)為0
SyntaxError 語法錯誤
IndexError 索引超出序列范圍
KeyError 請求一個不存在的字典關鍵字
IOError 輸入輸出錯誤(比如你要讀的文件不存在)
AttributeError 嘗試訪問未知的對象屬性
NameError
>>> bar
Traceback (most recent call last):
 File "", line 1, in 
NameError: name "bar" is not defined

Python中變量雖然不需在使用變量之前先聲明類型,但也需要對變量進行賦值,然后才能使用。不被賦值的變量,不能再Python中存在,因為變量相當于一個標簽,要把它貼到對象上才有意義。

ZeroDivisionError
>>> 1/0
Traceback (most recent call last):
 File "", line 1, in 
ZeroDivisionError: integer division or modulo by zero
SyntaxError
    >>> for i in range(10)
      File "", line 1
        for i in range(10)
                         ^
    SyntaxError: invalid syntax

這種錯誤發(fā)生在Python代碼編譯的時候,當編譯到這一句時,解釋器不能講代碼轉(zhuǎn)化為Python字節(jié)碼,就報錯。

IndexError和KeyError
    >>> a = [1,2,3]
    >>> a[4]
    Traceback (most recent call last):
      File "", line 1, in 
    IndexError: list index out of range
    
    >>> d = {"python":"itdiffer.com"}
    >>> d["java"]
    Traceback (most recent call last):
      File "", line 1, in 
    KeyError: "java"
IOError
    >>> f = open("foo")
    Traceback (most recent call last):
      File "", line 1, in 
    IOError: [Errno 2] No such file or directory: "foo"
AttributeError
    >>> class A(object): pass        #Python 3: class A: pass
    ... 
    >>> a = A()
    >>> a.foo
    Traceback (most recent call last):
      File "", line 1, in 
    AttributeError: "A" object has no attribute "foo"
處理異常
#!/usr/bin/env python
# coding=utf-8

while 1:
   print "this is a division program."
   c = raw_input("input "c" continue, otherwise logout:")
   if c == "c":
       a = raw_input("first number:")
       b = raw_input("second number:")
       try:
           print float(a)/float(b)
           print "*************************"
       except ZeroDivisionError:
           print "The second number can"t be zero!"
           print "*************************"
   else:
       break
try...except

對于上述程序,只看tryexcept部分,如果沒有異常發(fā)生,except子句在try語句執(zhí)行之后被忽略;如果try子句中有異常可,該部分的其它語句被忽略,直接跳到except部分,執(zhí)行其后面指定的異常類型及其子句。

except后面也可以沒有任何異常類型,即無異常參數(shù)。如果這樣,不論try部分發(fā)生什么異常,都會執(zhí)行except

except子句中,可以根據(jù)異常或者別的需要,進行更多的操作。比如:

#!/usr/bin/env python
# coding=utf-8

class Calculator(object):
   is_raise = True
   def calc(self, express):
       try:
           return eval(express) #運行表達式
       except ZeroDivisionError:
           if self.is_raise:
               print "zero can not be division."        #Python 3:  "zero can not be division."
           else:
               raise #拋出異常信息
處理多個異常
Python 2:

    #!/usr/bin/env python
    # coding=utf-8

    while 1:
        print "this is a division program."
        c = raw_input("input "c" continue, otherwise logout:")
        if c == "c":
            a = raw_input("first number:")
            b = raw_input("second number:")
            try:
                print float(a)/float(b)
                print "*************************"
            except ZeroDivisionError:
                print "The second number can"t be zero!"
                print "*************************"
            except ValueError:
                print "please input number."
                print "************************"
        else:
            break
            
 or
 
except (ZeroDivisionError, ValueError): #括號內(nèi)也可以包含多個異常
   print "please input rightly."
   print "********************"
打印異常,但程序不中斷
    while 1:
        print "this is a division program."
        c = raw_input("input "c" continue, otherwise logout:")
        if c == "c":
            a = raw_input("first number:")
            b = raw_input("second number:")
            try:
                print float(a)/float(b)
                print "*************************"
            except (ZeroDivisionError, ValueError), e: #類似java
                print e
                print "********************"
        else:
            break

Python 3:

    while 1:
        print("this is a division program.")
        c = input("input "c" continue, otherwise logout:")
        if c == "c":
            a = input("first number:")
            b = input("second number:")
            try:
                print(float(a)/float(b))
                print("*************************")
            except (ZeroDivisionError, ValueError) as e:
                print(e)
                print("********************")
        else:
            break
else語句
    >>> try:
    ...     print "I am try"        #Python 3: print("I am try"),
    ... except:                
    ...     print "I am except"
    ... else:                     #處理except就不會運行else
    ...     print "I am else"
    ... 
    I am try
    I am else

else語句應用,只有輸入正確的內(nèi)容,循環(huán)才會終止

    #!/usr/bin/env python
    # coding=utf-8
    while 1:
        try:
            x = raw_input("the first number:")
            y = raw_input("the second number:")

            r = float(x)/float(y)
            print r
        except Exception, e:  #python3為 Exception as e:
            print e
            print "try again."
        else:
            break
finally語句

如果有了finally,不管前面執(zhí)行的是try,還是except,最終都要執(zhí)行它。類似java

    >>> x = 10

    >>> try:
    ...     x = 1/0
    ... except Exception, e:        #Python 3:  except Exception as e:
    ...     print e        #Python 3: print(e)
    ... finally:
    ...     print "del x"        #Python 3:  print(e)
    ...     del x
    ... 
    integer division or modulo by zero
    del x
assert

assert是一句等價于布爾真的判定,發(fā)生異常就意味著表達式為假。當程序運行到某個節(jié)點的時候,就斷定某個變量的值必然是什么,或者對象必然擁有某個屬性等,簡單說就是斷定什么東西必然是什么,如果不是,就拋出異常。

#!/usr/bin/env python
# coding=utf-8
            
if __name__ == "__main__":
    a = 8
    assert a < 0
    print a
    
Traceback (most recent call last):
  File "/Users/liuguoquan/Documents/workspace/PythonDemo/main.py", line 6, in 
    assert a < 0
AssertionError

這就是斷言assert的引用。什么是使用斷言的最佳時機?有文章做了總結(jié):

如果沒有特別的目的,斷言應該用于如下情況:

防御性的編程

運行時對程序邏輯的檢測

合約性檢查(比如前置條件,后置條件)

程序中的常量

檢查文檔

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/38202.html

相關文章

  • 基礎如何學爬蟲技術

    摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術服務,現(xiàn)整理出零基礎如何學爬蟲技術以供學習,。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務,服務范圍涵蓋社交網(wǎng)絡電子商務分類信息學術研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術服務,現(xiàn)整理出零基礎如何學爬蟲技術以供學習,http://www.chujiangdata.com。 第一:Python爬蟲學習系列教程(來源于某博主:htt...

    KunMinX 評論0 收藏0
  • Python爬蟲學習路線

    摘要:以下這些項目,你拿來學習學習練練手。當你每個步驟都能做到很優(yōu)秀的時候,你應該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學習不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設計方案,比如說。 (一)如何學習Python 學習Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...

    liaoyg8023 評論0 收藏0
  • ApacheCN 人工智能知識樹 v1.0

    摘要:貢獻者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長時間,如果你一本書一本書看的話,的確要用很長時間。為了方便大家,我就把每本書的章節(jié)拆開,再按照知識點合并,手動整理了這個知識樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻者:飛龍版...

    劉厚水 評論0 收藏0
  • ??爆肝十二萬字《python從零到精通教程》,從零教你變大佬??(建議收藏)

    文章目錄 強烈推薦系列教程,建議學起來!! 一.pycharm下載安裝二.python下載安裝三.pycharm上配置python四.配置鏡像源讓你下載嗖嗖的快4.1pycharm內(nèi)部配置 4.2手動添加鏡像源4.3永久配置鏡像源 五.插件安裝(比如漢化?)5.1自動補碼神器第一款5.2漢化pycharm5.3其它插件 六.美女背景七.自定義腳本開頭八、這個前言一定要看九、pyt...

    booster 評論0 收藏0
  • Python 基礎起步 () 條件語句 if elif else 其實很簡單

    摘要:大家好,在我們上一篇復習了的基礎和實用技巧后,今天我們來看一下里的邏輯關系,所謂邏輯關系無非就是如果就否則之類的,不是非常復雜,我的意思是復雜的地方不用目前了解,因為已經(jīng)超出了小白的水準,哈哈,閑話少說,讓我們一起來看看吧什么是里面用的形 大家好,在我們上一篇復習了dict的基礎和實用技巧后,今天我們來看一下Python里的邏輯關系,所謂邏輯關系無非就是如果...就...否則...之類...

    nidaye 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<