在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

python如何捕獲異常和主動拋出異常

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-04 17:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

python如何主動拋出異常和捕獲異常

1. 如何拋出異常?

異常的產生有兩種來源:

一種是程序自動拋出,比如 1/0 會自動拋出 ZeroDivisionError

一種是開發者主動拋出,使用 raise 關鍵字拋出。

在 Python 中是使用 raise 關鍵字來拋出異常的,比如在下面這個函數中,如果不存在目標文件,則會拋出一個 Exception 通用異常。

def demo_func(filename):
    if not os.path.isfile(filename):
        raise Exception

2. 如何捕獲異常?

出現錯誤或者異常沒有關系,關鍵在于你要學會預判程序可能會出現的錯誤或異常,然后在代碼中捕獲這些異常并處理。

異常的捕獲的語法有如下四種:

第一種語法

只捕捉但是不想獲取異常信息

try:
    代碼A
except [EXCEPTION]:
    代碼B

第二種語法

不但捕捉了還要獲取異常信息,賦值給 e 后,后面你可以把異常信息打印到日志中。

try:
    代碼A
except [EXCEPTION] as e:
    代碼B

第三種語法

使用 try ... except ... else

如果代碼A發生了異常,則會走到代碼B的邏輯,如果沒有發生異常,則會走到代碼C

try:
    代碼A
except [exception] as e:
    代碼B
else:
    代碼C

舉個例子

不發生異常的情況

>>> try:
...     4/2
... except ZeroDivisionError as e:
...     print("發生了異常:錯誤信息如下: \n" + str(e))
... else:
...     print("程序正常運行")
...
2
程序正常運行

發生異常的情況

>>> try:
...     1/0
... except ZeroDivisionError as e:
...     print("發生了異常:錯誤信息如下: \n" + str(e))
... else:
...     print("程序正常運行")
...
發生了異常:錯誤信息如下:
integer division or modulo by zero

第四種語法

使用 try ... except ... finally

如果代碼A發生了異常,則會走到代碼B的邏輯,最后不管有沒有發生異常都會走到代碼C

try: 代碼A except [exception] as e: 代碼B finally: 代碼C

舉個例子

發生異常的情況

>>> try:
...     1/0
... except ZeroDivisionError as e:
...     print("發生了異常:錯誤信息如下: \n" + str(e))
... finally:
...     print("程序運行結束!!")
...
發生了異常:錯誤信息如下:
integer division or modulo by zero
程序運行結束!!

不發生異常的情況

>>> try:
...     4/2
... except ZeroDivisionError as e:
...     print("發生了異常:錯誤信息如下: \n" + str(e))
... finally:
...     print("程序運行結束!!")
...
2
程序運行結束!!

3. 捕獲多個異常?

每個except捕獲一個異常

一個 try 語句可能有多個 except 子句,以指定不同異常的處理程序,但是最多會執行一個處理程序。

當代碼 A 在運行中拋出了異常時,Python 解釋器會逐行運行代碼,如果拋出的異常是 exception1 那么后面直接運行代碼B,運行完 B 后,就不會再判斷后面兩個 except 語句了。

而如果不是 exception1 ,而是 exception2 ,那會運行代碼C,而不會再運行第三個 except 語句了。

try:
    代碼A
except [exception1] as e:
    代碼B
except [exception2] as e:
    代碼C
except [exception3] as e:
    代碼D

舉個例子吧,下面這段代碼,由于 1/0 會拋出 ZeroDivisionError 錯誤,所以前面兩個異常匹配都不成功,而在最后一個 except 成功匹配上,最終打印出 除數不能為 0

try:
    1/0
except IOError:
    print("IO讀寫出錯")
except FloatingPointError:
    # 浮點計算錯誤
    print("計算錯誤")
except ZeroDivisionError:
    # 除數不能為 0
    print("計算錯誤")
# output: 計算錯誤

一個except捕獲多個異常

上面的例子可以看出來,第二個異常和第三個異常是屬于同一類,就是 計算錯誤,異常處理的代碼是一樣的,那有沒有辦法將它們合并在一起呢,簡化一下代碼呢?

答案是,可以的。

在 except 后面其實是可以接多個異常的,多個異常之間使用括號包裹。只要匹配上一個就算捕獲到,就會進入相應的代碼分支。

try:
    1/0
except IOError:
    print("IO讀寫出錯")
except (ZeroDivisionError, FloatingPointError):
    print("計算出錯")
# output: 計算錯誤

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    56

    文章

    4825

    瀏覽量

    86432
  • 異常
    +關注

    關注

    0

    文章

    23

    瀏覽量

    9348
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    機器學習異常檢測實戰:用Isolation Forest快速構建無標簽異常檢測系統

    本文轉自:DeepHubIMBA無監督異常檢測作為機器學習領域的重要分支,專門用于在缺乏標記數據的環境中識別異常事件。本文深入探討異常檢測技術的理論基礎與實踐應用,通過IsolationForest
    的頭像 發表于 06-24 11:40 ?429次閱讀
    機器學習<b class='flag-5'>異常</b>檢測實戰:用Isolation Forest快速構建無標簽<b class='flag-5'>異常</b>檢測系統

    PLC指示燈異常閃爍原因及維修

    PLC(可編程邏輯控制器)作為工業自動化控制的核心設備,其運行狀態的穩定性直接影響生產線的效率與安全。指示燈作為PLC最直觀的狀態反饋窗口,其異常閃爍往往預示著潛在故障。本文將系統分析PLC指示燈
    的頭像 發表于 06-07 16:13 ?795次閱讀
    PLC指示燈<b class='flag-5'>異常</b>閃爍原因及維修

    泰克示波器高級觸發功能捕獲異常信號的5種方法

    在電子工程領域,示波器是調試和分析信號的核心工具,而泰克示波器憑借其強大的高級觸發功能,能夠精準捕獲異常信號,幫助工程師快速定位問題。本文將詳細介紹五種利用泰克示波器高級觸發功能捕獲異常
    的頭像 發表于 05-29 09:38 ?132次閱讀
    泰克示波器高級觸發功能<b class='flag-5'>捕獲</b><b class='flag-5'>異常</b>信號的5種方法

    散熱設計與測試:PCBA異常發熱的解決之道

    在電子設備的生產和測試過程中,PCBA(印制電路板組裝)異常發熱是一個常見且棘手的問題。過高的溫度不僅會影響設備的性能,還可能導致元器件損壞甚至設備報廢。因此,快速定位發熱原因并采取有效的解決措施
    的頭像 發表于 04-10 18:04 ?485次閱讀

    泰克MDO3052示波器波形捕獲率評測

    能力,為用戶提供選型參考。 一、波形捕獲率的核心價值與技術原理 波形捕獲率是示波器在單位時間內捕獲并處理波形的次數,直接影響異常信號的捕獲
    的頭像 發表于 04-02 11:49 ?333次閱讀
    泰克MDO3052示波器波形<b class='flag-5'>捕獲</b>率評測

    異常零流量小區檢測功能介紹

    隨著5G部署規模不斷擴大,網管KPI的分析需求突增也日益顯著,存在用戶感知問題無法從告警和KPI數值中直接體現的情況;或者某些小區存在故障而網絡維護工程師無法及時監控識別出來。異常零流量小區,就是指
    的頭像 發表于 03-22 09:54 ?421次閱讀
    <b class='flag-5'>異常</b>零流量小區檢測功能介紹

    PLC異常工作的原因和解決辦法

    PLC(可編程邏輯控制器)異常工作的原因及解決辦法。
    的頭像 發表于 02-24 17:27 ?959次閱讀

    電路異常現象及解決

    1 電路異常現象 這是面包板論壇看到的一則帖子,帖主的問題主要是使用一個網上借鑒的光耦串口隔離電路,結果實際調試發現根本通訊不上: ? 您是否已經看到這個問題發生的原因了? ? 2 問題原因
    的頭像 發表于 02-07 10:10 ?485次閱讀
    電路<b class='flag-5'>異常</b>現象及解決

    串口通訊異常處理方法 串口設備連接方式

    串口通信異常處理方法 1. 異常檢測 在串口通信中,首先需要能夠檢測到異常情況。異常檢測可以通過以下幾種方式實現: 硬件檢測 :利用串口硬件的中斷和狀態寄存器來檢測
    的頭像 發表于 12-27 09:53 ?3885次閱讀

    單片機異常復位的原因

    單片機異常復位是指單片機在正常工作過程中,非預期地返回到初始狀態或重啟。這種異常復位現象可能由多種因素引起,以下是對單片機異常復位原因的詳細分析:
    的頭像 發表于 10-17 17:56 ?2951次閱讀

    令人頭疼的異常重啟,竟然是KV的鍋…

    合宙模組異常重啟原因排查
    的頭像 發表于 09-26 18:14 ?790次閱讀
    令人頭疼的<b class='flag-5'>異常</b>重啟,竟然是KV的鍋…

    儀表溫度異常的產生原因

    電子發燒友網站提供《儀表溫度異常的產生原因.docx》資料免費下載
    發表于 09-12 14:09 ?0次下載

    Panasonic松下焊接電異常處理

    電子發燒友網站提供《Panasonic松下焊接電異常處理.pdf》資料免費下載
    發表于 08-19 14:24 ?0次下載

    嵌入式C編程常用的異常錯誤處理

    嵌入式C編程中,異常錯誤處理是確保系統穩定性和可靠性的重要部分。以下是一些常見的異常錯誤處理方法及其詳細說明和示例: 1. 斷言 (Assertions) 斷言用于在開發階段捕獲程序中的邏輯錯誤
    發表于 08-06 14:32

    ESP8266使用mDNS后,ESP會拋出異常怎么解決?

    我在 OTA 實驗中注意到了它。使用 mDNS 后,ESP 會拋出異常 (0)。它每分鐘正好執行此操作 1 次。無論WN523N2是在橋接模式還是中繼器模式下運行,都沒有區別。該錯誤僅發生
    發表于 07-18 07:27
    主站蜘蛛池模板: 高清不卡免费一区二区三区 | videos另类重口tv | 欧美伦理一区二区三区 | 亚洲伊人久久大香线蕉影院 | 自拍偷拍欧美 | 色噜噜狠狠狠综合曰曰曰 | 久久久99精品免费观看精品 | 在线成人aa在线看片 | 久久精品国产亚洲综合色 | 韩日色图 | 精品日韩一区二区三区 | 美女被异性狂揉下部羞羞视频 | 亚洲成a人一区二区三区 | 1000部禁片黄的免费看 | 奇米欧美成人综合影院 | 新版天堂资源中文在线 | 成人欧美一区二区三区小说 | japanesexxx日本69 japan日韩xxxx69hd | 99久久99久久免费精品蜜桃 | 香蕉视频在线观看国产 | 人人成人免费公开视频 | 成人亚洲网站www在线观看 | 一级毛片在播放免费 | 一本大道一卡二卡 | 99视频在线永久免费观看 | 久草资源免费 | 欧美操穴| 午夜网站免费 | 看免费黄色大片 | 第三级视频在线观看 | 手机在线一区二区三区 | 男人操女人视频在线观看 | 亚洲香蕉久久一区二区三区四区 | 一级特黄aa大片 | 天堂在线www | 一及黄色 | 天天操天天摸天天干 | 免费视频在线视频观看1 | 高h乱肉辣文辣书阁 | 天天搞夜夜爽 | 国产综合精品久久久久成人影 |