首頁 > 軟體

python基礎知識之try...except...的詳細用法範例

2022-08-15 22:01:05

前言

我們把可能發生錯誤的語句放在try模組裡,用except來處理異常。except可以處理一個專門的異常,也可以處理一組圓括號中的異常,如果except後沒有指定異常,則預設處理所有的異常。每一個try,都必須至少有一個except

1.異常類只能來處理指定的異常情況,如果非指定異常則無法處理

s1 = 'hello'
try:
    int(s1)
except IndexError as e: # 未捕獲到異常,程式直接報錯
    print (e)

2.多分支

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)

3.萬能異常Exception

s1 = 'hello'
try:
    int(s1)
except Exception as e:
    print(e)

4.多分支+Exception

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
except Exception as e:
    print(e)

5.異常的其他機構(try…finally語法)

try…finally語句無論是否發生異常都將會執行最後的程式碼。

語法如下:

try:
<語句>
finally:
<語句>    #退出try時總會執行
raise

範例:

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except ValueError as e:
    print(e)
#except Exception as e:
#    print(e)
else:
    print('try內程式碼塊沒有異常則執行我')
finally:
    print('無論異常與否,都會執行該模組,通常是進行清理工作')

6.主動觸發異常(raise語句)

我們可以使用raise語句自己觸發異常,raise語法格式如下:

raise [Exception [, args [, traceback]]]

語句中Exception是異常的型別(例如,NameError)引數是一個異常引數值。該引數是可選的,如果不提供,異常的引數是"None"。

最後一個引數是可選的(在實踐中很少使用),如果存在,是跟蹤異常物件。

範例:

一個異常可以是一個字串,類或物件。 Python的核心提供的異常,大多數都是範例化的類,這是一個類的範例的引數。

定義一個異常非常簡單,如下所示:

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 觸發異常後,後面的程式碼就不會再執行        
try:
    raise TypeError('型別錯誤')
except Exception as e:
    print(e)

7.自定義異常

通過建立一個新的異常類,程式可以命名它們自己的異常。異常應該是典型的繼承自Exception類,通過直接或間接的方式。

以下為與BaseException相關的範例,範例中建立了一個類,基礎類別為BaseException,用於在異常觸發時輸出更多的資訊。

在try語句塊中,使用者自定義的異常後執行except塊語句,變數 e 是用於建立Networkerror類的範例。

class Networkerror(BaseException):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg
 
try:
    raise Networkerror('型別錯誤')
except Networkerror as e:
    print(e)

8.斷言:assert條件

assert 1 == 1 
assert 1 == 2

9.總結try…except

  • 把錯誤處理和真正的工作分開來
  • 程式碼更易組織,更清晰,複雜的工作任務更容易實現
  • 毫無疑問,更安全了,不至於由於一些小的疏忽而使程式意外崩潰了

補充:多重try

如果是巢狀的try...except...的話,這一層raise的錯誤,會被上一層的try...except...進行捕獲

總結

到此這篇關於python基礎知識之try...except...詳細用法的文章就介紹到這了,更多相關python try...except...詳細用法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com