python 3操做文件的異常處理

在執行python腳本時,正常運行的時候,也可能發生錯誤,返回的錯誤類型就是報錯信息,咱們能夠針對其返回的錯誤類型執行相應的語句,錯誤類型有不少,如:ValueError、TypeError、NameError、ZeroDivisionError.....python

一、try / except

來個簡單的語法,以下:ide

while True:
    try:
        x = int(input('請輸入一個數字:'))
        break
    except ValueError:
        print('您輸入的不是一個數字,請再次嘗試!')

執行結果以下:函數

請輸入一個數字:d
您輸入的不是一個數字,請再次嘗試!
請輸入一個數字:3

try語句按照以下的方式工做:this

  • 首先,執行try子句(在關鍵字try和except之間的語句)。
  • 若是沒有發生異常,則忽略except子句,try子句執行後結束。
  • 若是在執行try子句的過程當中發生了異常,那麼try子句餘下的部分將會被忽略,若是異常類型和except以後定義的異常類型相同,則會執行except關鍵字下的子句。
  • 若是一個異常沒有與任何except匹配,那麼這個異常將會傳遞給上層的try中。
  • 一個try語句能夠包含多個except子句,分別來處理不一樣的特定異常,可是最多隻有一個except分支會被執行。code

  • 處理程序將只針對對應的try子句中的異常進行處理,而不是其餘的try的處理程序中的異常。

一個except子句能夠同時處理多個異常,這些異常被放在括號中成爲一個元組,栗子以下:orm

except (RuntimeError,TypeError,NameError,ValueError):
    pass

注:pass表示忽略此異常,不執行任何語句。ip

最後一個except子句能夠忽略異常的名稱,它被看成通配符使用。栗子以下:input

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("OS error: {0}".format(err))
except ValueError:
    print("不能將數據轉換爲整數類型!")
except:
    pass

二、try / except / else

try/except語句還有一個可選的else子句,若是使用這個子句,那麼必須放在全部except子句以後,else子句將在try子句沒有發生任何異常的時候執行。it

語法格式以下:io

try:
        #正常執行的代碼塊
    except 異常類型:
        #發生異常時執行的代碼塊
    else:
        # 沒有異常時執行的代碼塊

栗子以下:

while True:
    try:
        x = int(input('請輸入一個數字:'))
        # break
    except (ValueError,NameError,Exception):
        print("您輸入的不是數字!")
    else:
        print('用戶輸入完畢!')

使用else子句比把全部的語句都放在try子句裏要好,這樣能夠避免一些意想不到,而except又沒法捕獲的異常。

異常處理並不單單處理那些直接發生在try子句中的異常,並且還能處理子句中調用的函數(甚至間接調用的函數)裏拋出異常,栗子以下:

try:
    this_fails()
except ZeroDivisionError as err:
    print('Handling run-time error:', err)

在上面的栗子中,若是函數中報錯類型爲:ZeroDivisionError,那麼將會輸出如下內容:

Handling run-time error:err

三、try / finally

try / finally語句不管是否發生都將執行最後的代碼。

語法格式:

try:
    #正常執行的代碼塊
except 異常類型:
    #發生異常時執行的代碼塊
else:
    #沒有異常時執行的代碼塊
finally:
    #無論有沒有異常都會執行的代碼塊

示例以下:

while True:
    try:
        x = int(input('請輸入一個數字:'))
        # break
    except (ValueError,NameError,Exception):
        print("您輸入的不是數字!")
    else:
        print('用戶輸入完畢!')
    finally:
        print("這句話,不管異常是否發生都會執行。")
相關文章
相關標籤/搜索