在 Python 中引發異常
我們將介紹在 Python 中引發異常的不同方法。
在 Python 中引發異常
當我們編寫 Python 程式並執行它們時,如果程式中缺少某些內容或程式碼中有錯誤,它會給出輸出或錯誤。異常類似於 Python 程式語言中的異常。
當我們的程式做錯事時,Python 會引發許多內建異常。如果在我們嘗試執行程式時發生任何異常,它會停止程式並顯示程式嘗試執行程式碼時發生的異常。
本文通過一些簡單的程式演示瞭如何使用 try
、except
和 finally
語句處理 Python 程式中的異常。
Python 中的 try
語句
在 Python 中,我們可以通過在程式碼中使用 try
語句來處理異常,以最大限度地減少異常的機會。try
子句包含可能產生異常的關鍵操作。
except
子句包含解決異常的程式碼。
現在,讓我們看一個例子,如果使用者輸入錯誤的值,使用 try
語句引發異常。
# python
Any_List = [2, "Husnain", 4, 6, 8]
for value in Any_List:
try:
print("The value is", value)
raci = 1 / int(value)
print("The reciprocal of", value, "is", raci)
print("")
except:
print("Oops! There is a string in this list.")
print("The reciprocal of", value, "cannot be done!")
print("")
輸出:
上面的例子顯示了這個程式遍歷了 Any_List
中的條目,如果沒有異常,except
塊將被跳過,程式碼將順利執行,直到它到達 Any_List
中的最後一個元素.
但是,如果在遍歷 Any_List
中的所有元素時出現異常,except
塊將被執行,並列印如上結果所示的值。
現在,讓我們舉一個例子,我們將在其中建立三個不同的 except
案例。我們在上面的程式中提到了只有一個 except
塊的 try
語句。
但是在這個程式中,我們使用了三個 except
塊,它們提供了更多選擇子句的選項。
# python
VAR0 = 10
try:
VAR1 = int("Husnain")
VAR2 = int(56)
result = (int(VAR1) * int(VAR2)) / (VAR0 * int(VAR2))
except ValueError as ve:
print(ve)
exit()
except TypeError as te:
print(te)
exit()
except:
print("Unexpected Error!")
exit()
print(result)
輸出:
這是一個包含三個異常塊的程式。現在,讓我們來看看另一種方法,raise
,它可以用來在 Python 中引發異常。
Python 中的 raise
關鍵字
當 Python 程式設計執行時程式碼中出現一些錯誤時,就會引發異常。我們可以使用 raise
關鍵字手動引發異常。
我們還可以將值傳遞給異常,以提供有關異常以及程式引發它的原因的更多資訊。
讓我們舉個例子,我們將使用 raise
關鍵字手動引發錯誤。
# python
try:
num = int(-23)
if num <= 0:
raise ValueError("entred number is not positive")
except ValueError as ve:
print(ve)
輸出:
上面的例子表明,輸入負數會引發我們通過 raise
關鍵字設定的異常。
現在,讓我們來看另一個示例,在該示例中,我們將使用 else
子句手動引發異常。
Python 中的 else
子句
在某些情況下,當我們想在 try
語句下執行程式沒有任何錯誤時,我們會使用 else
語句來完成程式處理。
# python
try:
number = int(21)
assert number % 2 == 0
except:
print("It is not a even number!")
else:
reciprocal = 1 / number
print(reciprocal)
輸出:
從上面的例子可以看出,如果輸入的數是偶數,那麼程式輸出這個數的倒數,如果不是偶數,就會丟擲異常,如上結果所示。
Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.
LinkedIn