語法錯誤: 顧名思義,此錯誤是由代碼中的語法錯誤引起的。它導致程序終止。
例:
# 始化amount變量
amount = 10000
if (amount > 2999)
print("hallo world")
輸出:
異常: 當程序在語法上正確,但代碼導致錯誤時,會引發異常。此錯誤不會停止程序的執行,但是,它會更改程序的正常流。
例:
# 初始化 marks 變量
marks = 10000
# 使用0執行除法
a = marks / 0
print(a)
輸出:
在上面的示例中,當我們嘗試將數字除以0時,報了除以0的錯誤
注意: 異常是 Python 中所有異常的基類。可以在此處檢查異常層次結構。
try 和 except 語句用於捕獲和處理 Python 中的異常。可以引發異常的語句保留在 try 子句中,處理異常的語句寫在 except 子句中。
例: 讓我們嘗試訪問其索引越界的數組元素並處理相應的異常。
# 處理簡單運行時錯誤的Python程序
# Python 3
a = [1, 2, 3]
try:
print("Second element = %d" % (a[1]))
# 由於數組中只有3個元素,因此引發錯誤
print("Fourth element = %d" % (a[3]))
except:
print("索引超出范圍")
在上面的示例中,可能導致錯誤的語句放置在 try 語句(在本例中為第二個 print 語句)中。第二個 print 語句嘗試訪問列表中不存在的第四個元素,這會引發異常。然後,此異常由 except 語句捕獲。
try 語句可以有多個 except 子句,以便為不同的異常指定處理程序。請注意,最多將執行一個處理程序。例如,我們可以在上面的代碼中添加 IndexError。添加特定異常的一般語法是 –
# 處理簡單運行時錯誤的Python程序
# Python 3
try:
#可能引發異常的語句
...
except IndexError:
# 發生索引異常後運行的語句
...
except ValueError:
# 發生值異常後運行的語句
...
例: 在 Python 中捕獲特定異常
# Program to handle multiple errors with one
# except statement
# Python 3
def fun(a):
if a < 4:
# throws ZeroDivisionError for a = 3
b = a / (a - 3)
# throws NameError if a >= 4
print("Value of b = ", b)
try:
fun(3)
fun(5)
# note that braces () are necessary here for
# multiple exceptions
except ZeroDivisionError:
print("發生了ZeroDivisionError")
except NameError:
print("發生了NameError")
輸出
如果將fun(3) 注釋掉,輸出將會是:
上面的輸出之所以如此,是因為一旦python嘗試訪問b的值,就會發生NameError。
在python中,您還可以在 try-except 塊上使用 else 子句,該子句必須在所有 except 子句之後存在。僅當 try 子句未引發異常時,代碼才會進入 else 塊。
例: 嘗試使用 else 子句
# 用try-except描述else子句的程序
# Python 3
# 返回a/b的函數
def AbyB(a, b):
try:
c = ((a + b) / (a - b))
except ZeroDivisionError:
print("不能除以0")
else:
print(c)
if __name__ == '__main__':
# 用於測試上述功能的驅動程序
AbyB(2.0, 3.0)
AbyB(3.0, 3.0)
輸出:
Python提供了一個關鍵字 finally
,該關鍵字始終在try
後執行。 finally
始終在try
塊正常終止後執行,或者在某些異常而終止之後執行。
語法:
try:
# 可能出現異常的代碼....
...
except:
# 捕獲異常
# 異常之後執行的代碼
...
else:
# 如果不出現異常之後執行的代碼
...
finally:
# 無論如何都會執行的代碼
...
例:
# Python程序最終演示
# try塊中未引發異常
try:
k = 5 // 0 # 引發“除以零”異常。
print(k)
# 處理零除法異常
except ZeroDivisionError:
print("不能除以 0 ")
finally:
# 始終執行此代碼
# 無論是否生成異常。
print('這句話無論是否出現異常都會執行')
輸出結果:
raise 語句允許程序員強制發生特定的異常。raise 中的唯一參數表示要提出的例外情況。這必須是異常實例或異常類(從 Exception 派生的類)。
# 描述引發異常的程序
try:
raise NameError("Hi there") # 拋出 Error
except NameError:
print("這是我主動拋出的異常")
raise # 確定是否引發了異常
輸出: