1. 程式人生 > >Python學習筆記函數之異常處理

Python學習筆記函數之異常處理

作用 cti odi 可恥 dom tor 技術 ret define

隨筆記錄方便自己和同路人查閱。

#------------------------------------------------我是可恥的分割線-------------------------------------------

  在Python程序中遇到錯誤,或“異常”,意味著整個程序崩潰。你不希望這發生在真實的程序中。相反,

你希望程序能檢測錯誤,處理它們,然後繼續運行。

  列如,一個程序,它有一個“除數為零”的錯誤。

#------------------------------------------------我是可恥的分割線-------------------------------------------

  示例代碼:

#
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#import random
def spam(divideBY):#define a function
    return 42 / divideBY#
print(spam(2))#function reference
print(spam(10))#function reference
print(spam(0))#function reference
print(spam(1))#function reference

  運行結果:

技術分享圖片

  當試圖用一個數整除零時,程序發生了zeroDivisionError錯誤,根據錯誤信息中給出的行號,我們知道是spam中的return語句導致的錯誤。

導致錯誤後最後一行print(spam(1))沒有被執行,如果我們想要讓程序遇到錯誤後給出提示並繼續執行,看修改後的代碼:

#
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#import random
def spam(divideBY):#define a function
    try:
        return 42 / divideBY#
    except ZeroDivisionError:
        print(‘Error:Invalid argument.‘)
print(spam(2))#function reference
print(spam(10))#function reference
print(spam(0))#function reference
print(spam(1))#function reference

  運行結果:

技術分享圖片

  在修改程序中我們加了try:和except:,它們的作用是,如果在try:代碼塊中發生錯誤,程序立即就轉到except子句的代碼。

在運行except子句的代碼之後,程序繼續執行。

  try和excapt可以放在函數外使用,但我們盡量避免這樣,看下面代碼示例:

#
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
#import random
def spam(divideBY):#define a function
    return 42 / divideBY  #
try:
    print(spam(2))  # 
    print(spam(10))  # 
    print(spam(0))  # 
    print(spam(1))  # 
except ZeroDivisionError:
    print(‘Error:Invalid argument.‘)

  運行結果:

技術分享圖片

  根據運行結果可看出,print(spam(1))從沒有被執行,這是因為如果try中發生錯誤會立即跳轉到except子句,但程序不會再返回try子句。

Python學習筆記函數之異常處理