Python知識集合(異常處理和程序調試)

1、異常處理語句

1.1、try…except語句

語法格式:

try:
	block1
except [ExceptionName [as alias]]:
	block2

參數說明:
block1:表示可能出錯的代碼塊

ExceptionName [as alias]:可選參數,用於指定要捕獲的異常,其中 ExceptionName表示要捕獲的異常名稱,如果在其右側加上 as alias 表示當前的異常指定一個別名。

block2:表示進行異常處理的代碼塊,在這裏可以輸出固定的提示信息,也可以通過別名輸出異常的具體內容

注意:如果except後面不知道異常名稱,則表示捕獲全部異常。使用try…except語句捕獲異常後,程序會繼續執行。

1.2、try …except…else語句

try …except…else語句與try …except語句的不同在於當沒有異常時,使用else子語句。

例子

def division():
    ''' 實現功能:分蘋果 '''
    print("\n-----------------分蘋果了-----------------\n")
    apple = int(input("請輸入蘋果個數:"))
    children = int(input("請輸出一共有幾個小朋友:"))
    result = apple // children                 # 計算每個小朋友分幾個蘋果,輸出整數
    remain = apple - result * children         # 計算剩下的蘋果
    if remain > 0:
        print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result,"個,剩下", remain, "個。")
    else:
        print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result, "個。")
if __name__ == '__main__':
    try:                                                # 捕獲異常
        division()
    except ZeroDivisionError:                            # 處理zero異常
        print("\n出錯了,不能把蘋果分給0個小朋友。")
    except ValueError as e:                              # 處理value異常
        print("輸入錯誤:", e)
    else:                                                # 沒有拋出異常時執行
        print("蘋果成功分給小朋友。")

1.3、try …except …finally語句

不管是否有異常產生,都會執行finally裏的語句
語法格式:

try:
	block1
except [ExceptionName [as alias]]:
    block2
finally:
    block3

例子

def division():
    ''' 實現功能:分蘋果 '''
    print("\n-----------------分蘋果了-----------------\n")
    apple = int(input("請輸入蘋果個數:"))
    children = int(input("請輸出一共有幾個小朋友:"))
    result = apple // children                 # 計算每個小朋友分幾個蘋果,輸出整數
    remain = apple - result * children         # 計算剩下的蘋果
    if remain > 0:
        print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result,"個,剩下", remain, "個。")
    else:
        print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result, "個。")
if __name__ == '__main__':
    try:                                                # 捕獲異常
        division()
    except ZeroDivisionError:                            # 處理zero異常
        print("\n出錯了,不能把蘋果分給0個小朋友。")
    except ValueError as e:                              # 處理value異常
        print("輸入錯誤:", e)
    else:                                                # 沒有拋出異常時執行
        print("蘋果成功分給小朋友。")
     finally:
     	print("進行了一次分蘋果操作")

輸出:

-----------------分蘋果了-----------------

請輸入蘋果個數:8
請輸出一共有幾個小朋友:0

出錯了,不能把蘋果分給0個小朋友。
進行了一次分蘋果操作

1.4、使用raise語句拋出異常

如果函數或方法中有異常,卻不想在當前函數或方法中處理異常,可以使用raise處理異常。
語法格式:

raise [ExceptionName [(raise)]]

2、使用assert語句調試程序

語法格式:

assert expression [,reason]

說明:
expression: 條件表達式,如果該表達式爲真什麼,都不用做,如果爲假拋出AssertionError異常。
reason:可選參數,用於對判斷條件進行描述,爲了以後更好的知道哪裏出了問題
例子

def division():
    ''' 實現功能:分蘋果 '''
    print("\n-----------------分蘋果了-----------------\n")
    apple = int(input("請輸入蘋果個數:"))
    children = int(input("請輸出一共有幾個小朋友:"))
    assert apple > children, "蘋果不夠分"
    result = apple // children                 # 計算每個小朋友分幾個蘋果,輸出整數
    remain = apple - result * children         # 計算剩下的蘋果
    if remain > 0:
        print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result,"個,剩下", remain, "個。")
    else:
        print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result, "個。")
if __name__ == '__main__':
    division()

輸出:

請輸入蘋果個數:5
請輸出一共有幾個小朋友:8
Traceback (most recent call last):
  File "D:/Python/web/test.py", line 14, in <module>
    division()
  File "D:/Python/web/test.py", line 6, in division
    assert apple > children, "蘋果不夠分"
AssertionError: 蘋果不夠分

通常情況下,assert語句可以和異常處理語句結合使用,把上面的代碼的最後一行語句改爲

try:
    division()
except AssertionError as e:
    print("\n輸出有誤:", e)

輸出

-----------------分蘋果了-----------------

請輸入蘋果個數:5
請輸出一共有幾個小朋友:8

輸出有誤: 蘋果不夠分

注意:assert語句只在調試階段有效。我們可以通過在執行python命令時加入-O(大寫)參數來關閉asset語句。
如在命令行窗口下可以使用以下命令

python -O 調試文件.py 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章