前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理,
以下文章來源于SAMshare,作者SonerY?ld?r?m
每個軟體程式員的夢想是撰寫一個可以平穩運行的程式,但是,起初情況并非如此,發生錯誤時,將停止執行代碼,
意外的情況或狀況可能會導致錯誤,Python將這些情況視為例外,并根據例外型別引發不同型別的錯誤,
ValueError,TypeError,AttributeError和SyntaxError是這些例外的一些示例,好訊息是Python還提供了處理例外的方法,
考慮以下要求用戶輸入數字并列印數字平方的代碼,
a = int(input("Please enter a number: ")) print(f'{a} squared is {a*a}')
只要輸入是數字,它就可以正常作業,但是,如果用戶輸入一個字串,python將引發ValueError:
我們可以在代碼中實作try-except塊,以更好地處理此例外,例如,我們可以向用戶回傳更簡單的錯誤訊息,或者要求他們提供其他輸入,
try: a = int(input("Please enter a number: ")) print(f'{a} squared is {a*a}') except: print("Wrong input type! You must enter a number!")
在上述情況下,代碼會更清楚地告知用戶有關錯誤的資訊,
如果由于try塊中的代碼引發了例外,則執行將繼續使用except塊中的陳述句,因此,由程式員決定如何處理例外,
普通的try-except塊將捕獲任何型別的錯誤,但是,我們可以更具體一些,例如,我們可能只對特定型別的錯誤感興趣,或者希望以不同方式處理不同型別的錯誤,
可以使用except陳述句指定錯誤的型別,考慮下面的代碼,要求用戶從串列中輸入一個數字,然后,它根據輸入從字典回傳一個名稱,
dict_a = {1:'Max', 2:'Ashley', 3:'John'}
number = int(input(f'Pick a number from the list: {list(dict_a.keys())}'))
如果用戶輸入的數字不在給定串列中,我們將收到KeyError,如果輸入的不是數字,我們將得到ValueError,我們可以使用兩個except陳述句來處理這兩種情況,
try: dict_a = {1:'Max', 2:'Ashley', 3:'John'} number = int(input(f'Pick a number from the list: {list(dict_a.keys())}')) print(dict_a[number]) except KeyError: print(f'{number} is not in the list') except ValueError: print('You must enter a number!')
Python還允許引發您自己的例外,這是自定義默認例外的一種,raise關鍵字和錯誤型別用于創建您自己的例外,
try: a = int(input("Please enter a number: ")) print(f'{a} squared is {a*a}') except: raise ValueError("You must enter a number!")
如果是非數字輸入,這是錯誤訊息,
ValueError: You must enter a number!
讓我們做另一個例子,展示如何在函式中使用try-except塊,
avg_value函式回傳數字串列的平均值,
a = [1, 2, 3] def avg_value(lst): avg = sum(lst) / len(lst) return avgprint(avg_value(a))
如果我們將一個空串列傳遞給此函式,則它將給出ZeroDivisionError,因為空串列的長度為零,
我們可以在函式中實作try-except塊來處理此例外,
def avg_value(lst): try: avg = sum(lst) / len(lst) return avg except: print('Warning: Empty list') return 0
如果串列為空,該函式將顯示警告并回傳0,
a = [] print(avg_value(a)) #Warning: Empty list #0
try和except塊用于處理例外,斷言用于確保條件與功能要求兼容,
如果斷言為假,則該函式不會繼續,因此,斷言可以是防御性編程的示例,程式員確保一切都按預期進行,
讓我們在avg_value函式中實作斷言,我們必須確保串列不為空,
def avg_value(lst): assert not len(lst) == 0, 'No values' avg = sum(lst) / len(lst) return avg
如果串列的長度為零,則該函式立即終止,否則,它將持續到結束,
如果assert陳述句中的條件為false,則將引發AssertionError:
a = [] print(avg_value(a)) AssertionError: No values
斷言對于查找代碼中的錯誤非常有用,因此,它們可用于支持測驗,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/220020.html
標籤:其他
上一篇:牛逼哄哄的零拷貝是什么?
