欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 異常處理總結(jié)

 更新時(shí)間:2021年09月24日 11:49:52   作者:海擁  
閱讀本篇文章以學(xué)習(xí) Python 異常處理。它應(yīng)該可以幫助您了解如何在程序中使用 try、except 和 finally 語句。下面跟著小編一起來學(xué)習(xí)文章內(nèi)容吧

異常處理對(duì)于創(chuàng)建健壯和穩(wěn)定的應(yīng)用程序非常重要。它鼓勵(lì)程序員編寫干凈、可讀和無錯(cuò)誤的代碼。

您會(huì)同意,即使是最好的代碼也可能在運(yùn)行時(shí)出現(xiàn)意外行為。這可能是由于缺少配置,或者執(zhí)行環(huán)境發(fā)生了變化,或者用戶輸入了錯(cuò)誤的輸入。

其中一些錯(cuò)誤可能會(huì)導(dǎo)致程序突然終止。在 Python 異常處理的幫助下,我們可以管理上述問題并避免我們的代碼間歇性失敗。

首先,我們必須了解錯(cuò)誤和異常之間的區(qū)別。因此,我們將教您 Python 異常處理的基本知識(shí)。

一、Python 異常處理:錯(cuò)誤與異常

1、什么是錯(cuò)誤?

錯(cuò)誤是程序中出現(xiàn)的錯(cuò)誤,例如語法錯(cuò)誤。

它發(fā)生在編譯時(shí)。讓我們看一個(gè)例子。

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

2、什么是異常?

錯(cuò)誤也會(huì)在運(yùn)行時(shí)發(fā)生,我們將它們稱為異常。異常是在程序執(zhí)行期間發(fā)生并中斷程序指令正常流程的事件。

通常,當(dāng) Python 腳本遇到它無法處理的錯(cuò)誤情況時(shí),它會(huì)引發(fā)異常。

當(dāng) Python 腳本引發(fā)異常時(shí),它會(huì)創(chuàng)建一個(gè)異常對(duì)象。

通常,腳本會(huì)立即處理異常。如果它不這樣做,那么程序?qū)⒔K止并打印對(duì)錯(cuò)誤的追溯及其下落。

>>> 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 塊中,您編寫可以引發(fā)異常的代碼。

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

2、Python 異常處理語法

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

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

看一看 – 30 個(gè) Python 教程和技巧

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

  • 根據(jù)需求,單個(gè) try 語句可以有多個(gè) except 語句。在這種情況下,try 塊包含可以拋出不同類型異常的語句。
  • 我們還可以添加一個(gè)通用的 except 子句,它可以處理所有可能的異常類型。
  • 我們甚至可以在except子句之后包含一個(gè)else子句。如果 try 塊中的代碼沒有引發(fā)異常,則 else 塊中的指令將執(zhí)行。

3、Python 異常處理示例

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

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

上面的代碼產(chǎn)生以下輸出。

>>對(duì)文件執(zhí)行寫操作成功

讓我們?cè)倥e一個(gè)例子,在這個(gè)例子中我們?cè)噲D以 READ 模式打開一個(gè)文件。

我們將對(duì)其執(zhí)行 WRITE 操作。執(zhí)行時(shí)會(huì)拋出異常。

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

上面的代碼產(chǎn)生以下輸出。

>>錯(cuò)誤:找不到文件或讀取數(shù)據(jù)

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

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

然而,這既不是一個(gè)好的編程習(xí)慣,也沒有人推薦它。

這是因?yàn)檫@樣的 Python try-except 塊可以處理所有類型的異常。但是它不會(huì)幫助程序員找到導(dǎo)致問題的異常。

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

1、例子

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

四、用 except 處理多個(gè)異常

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

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

請(qǐng)參考下面的例子。

1、例子

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

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

1、什么是 Try-Finally 語句?

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

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

此功能通常在釋放外部資源時(shí)出現(xiàn)。

這是幫助的編碼片段。

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

2、例子

一個(gè)關(guān)鍵點(diǎn)是我們可以為每個(gè) try 塊定義一個(gè)“ except ”或“ finally ”子句。你不能把這些放在一起。此外,您不應(yīng)將“ else ”子句與“ finally ”子句一起使用。

讓我們舉一個(gè)例子來更清楚。

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

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

>>try 塊執(zhí)行
>>finally 塊執(zhí)行

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

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

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

>>finally 塊執(zhí)行以關(guān)閉文件
>>錯(cuò)誤:找不到文件或讀取數(shù)據(jù)

當(dāng)某些代碼在 try 塊中引起異常時(shí),執(zhí)行會(huì)立即傳遞到“ finally ”塊?!?finally ”塊中的語句全部執(zhí)行完畢后,異?;謴?fù)到“ except ”塊執(zhí)行。但是必須存在“ try-except ”語句的下一個(gè)更高層。

六、用參數(shù)引發(fā)異常

1、什么是提升?

我們可以使用 raise 關(guān)鍵字強(qiáng)制引發(fā)異常。

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

2、提升語法

這是調(diào)用“ raise ”方法的語法。

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

在哪里,

  • 在 “Exception”下- 指定其名稱。
  • args ”是可選的,表示異常參數(shù)的值。
  • 最后一個(gè)參數(shù) “traceback” 也是可選的,如果存在,則是用于異常的回溯對(duì)象。

讓我們舉一個(gè)例子來證明這一點(diǎn)。

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 中創(chuàng)建自定義異常

1、什么是自定義異常?

自定義異常是程序員自己創(chuàng)建的異常。

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

大多數(shù)內(nèi)置異常也有相應(yīng)的類。

2、在 Python 中創(chuàng)建異常類

>>> 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

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

讓我們舉個(gè)例子。

3、例子

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

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

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

#定義 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

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

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

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

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

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

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

輸入一個(gè)字母:m
恭喜! 你猜對(duì)了

因此你可以看到我們?cè)谶@個(gè)程序中定義了一個(gè)名為 Error 的基類。它引發(fā)了從基類派生的兩個(gè)異常(“ InputTooSmallError ”和“ InputTooLargeError ”)。這是在 Python 編程中定義用戶定義異常的標(biāo)準(zhǔn)方法。

4、Python 內(nèi)置異常

八、總結(jié)——Python異常處理概念

大多數(shù)時(shí)候,我的目標(biāo)是發(fā)現(xiàn)一個(gè)可以幫助讀者工作的主題。這就是我們介紹本篇關(guān)于 Python 異常處理的原因。如果您喜歡這篇文章并有興趣看到更多此類文章,可以看看這里(Github/Gitee) 關(guān)注我以查看更多信息,這里匯總了我的全部原創(chuàng)及作品源碼

到此這篇關(guān)于Python 異常處理詳情的文章就介紹到這了,更多相關(guān)Python 異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python代碼風(fēng)格與編程習(xí)慣重要嗎?

    Python代碼風(fēng)格與編程習(xí)慣重要嗎?

    實(shí)現(xiàn)高內(nèi)聚,低耦合、結(jié)構(gòu)清晰不臃腫、可讀性高、數(shù)據(jù)冗余性低、高復(fù)用、易擴(kuò)展的代碼,并非易事.上到設(shè)計(jì)模式,下到某個(gè)類、方法、函數(shù)的構(gòu)造.在這里我分享一下我自己的代碼設(shè)計(jì),編寫風(fēng)格,讓我們互相學(xué)習(xí),需要的朋友可以參考下
    2021-06-06
  • 跟老齊學(xué)Python之不要紅頭文件(1)

    跟老齊學(xué)Python之不要紅頭文件(1)

    紅頭文件,是某國特別色的東西,在python里不需要,python里要處理的是計(jì)算機(jī)中的文件,包括文本的、圖片的、音頻的、視頻的等等,還有不少?zèng)]見過的擴(kuò)展名的,文件,在python中,是一種對(duì)象,就如同已經(jīng)學(xué)習(xí)過的字符串、數(shù)字等一樣。
    2014-09-09
  • python?虛擬環(huán)境詳解

    python?虛擬環(huán)境詳解

    這篇文章主要為大家介紹了python?虛擬環(huán)境,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2021-12-12
  • django的使用步驟入門教程(很詳細(xì))

    django的使用步驟入門教程(很詳細(xì))

    隨著IT行業(yè)的不斷發(fā)展,編程學(xué)習(xí)也越來越重要,很多人都開啟了很多計(jì)算機(jī)語言的學(xué)習(xí),下面這篇文章主要給大家介紹了關(guān)于django的使用步驟入門教程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Flask?+?MySQL如何實(shí)現(xiàn)用戶注冊(cè),登錄和登出的項(xiàng)目實(shí)踐

    Flask?+?MySQL如何實(shí)現(xiàn)用戶注冊(cè),登錄和登出的項(xiàng)目實(shí)踐

    本文主要介紹了Flask?+?MySQL?如何實(shí)現(xiàn)用戶注冊(cè),登錄和登出的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python語言實(shí)現(xiàn)獲取主機(jī)名根據(jù)端口殺死進(jìn)程

    Python語言實(shí)現(xiàn)獲取主機(jī)名根據(jù)端口殺死進(jìn)程

    這篇文章主要介紹了Python語言實(shí)現(xiàn)獲取主機(jī)名根據(jù)端口殺死進(jìn)程的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • python中如何讓輸出不換行

    python中如何讓輸出不換行

    這篇文章主要介紹了python中如何讓輸出不換行問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python實(shí)現(xiàn)簡單網(wǎng)頁圖片抓取完整代碼實(shí)例

    Python實(shí)現(xiàn)簡單網(wǎng)頁圖片抓取完整代碼實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)簡單網(wǎng)頁圖片抓取完整代碼實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • python?open讀取文件內(nèi)容時(shí)的mode模式解析

    python?open讀取文件內(nèi)容時(shí)的mode模式解析

    這篇文章主要介紹了python?open讀取文件內(nèi)容時(shí)的mode模式解析,Python可以使用open函數(shù)來實(shí)現(xiàn)文件的打開,關(guān)閉,讀寫操作,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • python網(wǎng)頁請(qǐng)求urllib2模塊簡單封裝代碼

    python網(wǎng)頁請(qǐng)求urllib2模塊簡單封裝代碼

    這篇文章主要分享一個(gè)python網(wǎng)頁請(qǐng)求模塊urllib2模塊的簡單封裝代碼,有需要的朋友參考下
    2014-02-02

最新評(píng)論