中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python異常處理的基本知識有哪些

發布時間:2021-09-25 15:17:01 來源:億速云 閱讀:384 作者:小新 欄目:開發技術

這篇文章主要介紹Python異常處理的基本知識有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

一、Python 異常處理:錯誤與異常

1、什么是錯誤?

錯誤是程序中出現的錯誤,例如語法錯誤。

它發生在編譯時。讓我們看一個例子

if a<5
File "<interactive input>", line 1
    if a < 5
           ^
SyntaxError: invalid syntax

2、什么是異常?

錯誤也會在運行時發生,我們將它們稱為異常。異常是在程序執行期間發生并中斷程序指令正常流程的事件。

通常,當 Python 腳本遇到它無法處理的錯誤情況時,它會引發異常。

Python 腳本引發異常時,它會創建一個異常對象。

通常,腳本會立即處理異常。如果它不這樣做,那么程序將終止并打印對錯誤的追溯及其下落。

>>> 1 / 0
Traceback (most recent call last):
 File "<string>", line 301, in run code
 File "<interactive input>", line 1, in <module>
ZeroDivisionError: division by zero

二、如何使用 Try-Except 處理異常?

1、什么是 Try-Except 語句?

我們使用 try-except 語句在 Python 程序中啟用異常處理。

try 塊中,您編寫可以引發異常的代碼。

而處理或捕獲異常的代碼,我們放在except子句中。

2、Python 異常處理語法

以下是Python try-except-else 塊的語法

try:
 你在這里做你的操作;
 ......................
except ExceptionI:
 如果有 ExceptionI,則執行此塊
except ExceptionII:
 如果有 ExceptionII,則執行此塊
 ......................
else:
 如果沒有異常則執行此塊。

看一看 – 30 個 Python 教程和技巧

這是有效使用 Python try 語句的清單。

  • 根據需求,單個 try 語句可以有多個 except 語句。在這種情況下,try 塊包含可以拋出不同類型異常的語句。

  • 我們還可以添加一個通用的 except 子句,它可以處理所有可能的異常類型。

  • 我們甚至可以在except子句之后包含一個else子句。如果 try 塊中的代碼沒有引發異常,則 else 塊中的指令將執行。

3、Python 異常處理示例

讓我們通過一個示例代碼來了解 Python try-except 的使用。

try:
   fob = open("test", "w")
   fob.write("這是我的異常處理測試文件")
except IOError:
   print 
   "錯誤:找不到文件或讀取數據"
else:
   print 
   "對文件執行寫操作成功"
   fob.close()

上面的代碼產生以下輸出。

>>對文件執行寫操作成功

讓我們再舉一個例子,在這個例子中我們試圖以 READ 模式打開一個文件。

我們將對其執行 WRITE 操作。執行時會拋出異常。

try:
   fob = open("test", "r")
   fob.write("這是我的測試文件,用于驗證 Python 中的異常處理")
except IOError:
   print 
   "錯誤:找不到文件或讀取數據"
else:
   print 
   "對文件執行寫操作成功"

上面的代碼產生以下輸出。

>>錯誤:找不到文件或讀取數據

三、用 Except 處理所有類型的異常

如果我們使用一個空的 “except” 子句,那么它將捕獲所有類型的異常。

然而,這既不是一個好的編程習慣,也沒有人推薦它。

這是因為這樣的 Python try-except 塊可以處理所有類型的異常。但是它不會幫助程序員找到導致問題的異常。

您可以通過以下代碼查看如何捕獲所有異常。

1、例子

try:
   你在這里做你的操作;
   ......................
except:
   如果有任何異常,則執行此塊
   ......................
else:
   如果沒有異常則執行此塊

四、用 except 處理多個異常

我們可以使用相同的 except 子句定義多個異常。這意味著如果 Python 解釋器找到匹配的異常,那么它將執行在 except 子句下編寫的代碼。

簡而言之,當我們這樣定義except子句時,我們期望同一段代碼拋出不同的異常。此外,我們希望在每種情況下都采取相同的行動。

請參考下面的例子。

1、例子

try:
   你在這里做你的操作;
   ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
   如果給定的異常列表中有任何異常,
   然后執行這個塊
   ......................
else:
   如果沒有異常則執行此塊

五、如何使用 Try-Finally 處理異常?

1、什么是 Try-Finally 語句?

我們還可以借助 try-finally 語句啟用 Python 異常處理。

使用 try 塊,我們還可以選擇定義“ finally ”塊。該子句允許定義我們想要執行的語句,無論 try 塊是否引發異常。

此功能通常在釋放外部資源時出現。

這是幫助的編碼片段。

try:
   你在這里做你的操作;
   ......................
   由于任何異常,這可能會被跳過
finally:
   這將始終被執行
   ......................

2、例子

一個關鍵點是我們可以為每個 try 塊定義一個“ except ”或“ finally ”子句。你不能把這些放在一起。此外,您不應將“ else ”子句與“ finally ”子句一起使用。

讓我們舉一個例子來更清楚。

try:
    fob = open('test', 'w')
    fob.write("這是我在異常處理中驗證 try-finally 的測試文件")
    print 'try 塊執行'
finally:
    fob.close()
    print 'finally 塊執行'

如果未發生異常,則您將看到以下輸出。

>>try 塊執行
>>finally 塊執行

假設我們以READ模式打開文件,然后嘗試對其執行寫操作。在這種情況下,下面的代碼將有助于處理異常。

try:
    fob = open('test', 'r')
    try:
        fob.write("這是我在異常處理中驗證 try-finally 的測試文件")
        print 'try 塊執行'
    finally:
        fob.close()
        print 'finally 塊執行以關閉文件'
except IOError:
    print "錯誤:找不到文件或讀取數據"

在這種情況下,解釋器將引發異常,并顯示以下輸出。

>>finally 塊執行以關閉文件
>>錯誤:找不到文件或讀取數據

當某些代碼在 try 塊中引起異常時,執行會立即傳遞到“ finally ”塊。“ finally ”塊中的語句全部執行完畢后,異常恢復到“ except ”塊執行。但是必須存在“ try-except ”語句的下一個更高層。

六、用參數引發異常

1、什么是提升?

我們可以使用 raise 關鍵字強制引發異常。

我們還可以選擇將值傳遞給異常并指定它發生的原因。

2、提升語法

這是調用“ raise ”方法的語法。

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

在哪里,

  • 在 “Exception”下- 指定其名稱。

  • args ”是可選的,表示異常參數的值。

  • 最后一個參數 “traceback” 也是可選的,如果存在,則是用于異常的回溯對象。

讓我們舉一個例子來證明這一點。

3、加注示例

>>> raise MemoryError
Traceback (most recent call last):
...
MemoryError
 
>>> raise MemoryError("This is an argument")
Traceback (most recent call last):
...
MemoryError: This is an argument
 
 
>>> try:
      a = int(input("Enter a positive integer value: "))
     if a <= 0:
            raise ValueError("This is not a positive number!!")
    except ValueError as ve:
      print(ve)
 
 
Following Output is displayed if we enter a negative number:
  
Enter a positive integer: –5
 
This is not a positive number!!

七、在 Python 中創建自定義異常

1、什么是自定義異常?

自定義異常是程序員自己創建的異常。

他通過添加一個新類來做到這一點。這里的技巧是從基本異常類派生自定義異常類。

大多數內置異常也有相應的類。

2、在 Python 中創建異常類

>>> class UserDefinedError(Exception):
...     pass
 
>>> raise UserDefinedError
Traceback (most recent call last):
...
__main__.UserDefinedError
 
>>> raise UserDefinedError("An error occurred")
Traceback (most recent call last):
...
__main__.UserDefinedError: An error occurred

在上面的代碼片段中,您可以看到我們創建了一個用戶定義的異常類,“ UserDefinedError ” 。它使用基 Exception 類作為父類。因此,新的用戶定義異常類將像任何其他異常類一樣引發異常,即通過調用帶有可選錯誤消息的“ raise ”語句。

讓我們舉個例子。

3、例子

在此示例中,我們將展示如何在程序中引發用戶定義的異常并捕獲錯誤。

該程序提示用戶一次又一次地輸入字母表,直到他只輸入存儲的字母表為止。

為了尋求幫助,該程序會向用戶提供提示,以便他可以找出正確的字母表。此外,他可以檢查他的猜測是否高于或低于存儲的字母表。

#定義 Python 用戶定義的異常
class Error(Exception):
   """Base class for other exceptions"""
   pass
 
class InputTooSmallError(Error):
   """Raised when the entered alpahbet is smaller than the actual one"""
   pass
 
class InputTooLargeError(Error):
   """Raised when the entered alpahbet is larger than the actual one"""
   pass

 
#我們的主程序
#用戶猜測一個字母,直到他/她猜對了
 
#你需要猜這個字母
alphabet = 'm'
 
while True:
   try:
       apb =  input("輸入一個字母: ")
       if apb < alphabet:
           raise InputTooSmallError
       elif apb > alphabet:
           raise InputTooLargeError
       break
   except InputTooSmallError:
       print("輸入的字母太小,再試一遍!")
       print('')
   except InputTooLargeError:
       print("輸入的字母太大,再試一遍!")
       print('')
 
print("恭喜! 你猜對了")

讓我們通過提供不同的輸入來測試這個程序。

輸入一個字母:c
輸入的字母太小,再試一遍!

輸入一個字母:s
輸入的字母太大,再試一遍!

輸入一個字母:q
輸入的字母太大,再試一遍!

輸入一個字母:k
輸入的字母太小,再試一遍!

輸入一個字母:m
恭喜! 你猜對了

Python異常處理的基本知識有哪些

因此你可以看到我們在這個程序中定義了一個名為 Error 的基類。它引發了從基類派生的兩個異常(“ InputTooSmallError ”和“ InputTooLargeError ”)。這是在 Python 編程中定義用戶定義異常的標準方法。

4、Python 內置異常

Python異常處理的基本知識有哪些

Python異常處理的基本知識有哪些

以上是“Python異常處理的基本知識有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彝良县| 平利县| 九江县| 凤城市| 大渡口区| 通辽市| 新丰县| 谷城县| 蕲春县| 吴旗县| 六枝特区| 乌鲁木齐县| 金塔县| 浑源县| 天等县| 建平县| 开封县| 吕梁市| 汉寿县| 商洛市| 南汇区| 十堰市| 同心县| 承德县| 濮阳市| 监利县| 陆河县| 绥江县| 淮安市| 抚顺县| 金门县| 信阳市| 大港区| 龙陵县| 九江县| 穆棱市| 格尔木市| 大英县| 仁化县| 塘沽区| 五华县|