python應用:異常處理

来源:https://www.cnblogs.com/jpapplication/archive/2018/08/22/9520539.html
-Advertisement-
Play Games

Python的錯誤異常在大部分IDE編輯器中則可以直接顯示出來,便於開發人員的調試及修改工作,對初學者也比較友好。 Python中包含錯誤和異常兩種情況,錯誤主要是常見的語法錯誤SyntaxError,並且在錯誤提示中會有倒三角箭頭的修改指示位置;python中的另外一種錯誤提醒叫做異常,指的是在語 ...


  Python的錯誤異常在大部分IDE編輯器中則可以直接顯示出來,便於開發人員的調試及修改工作,對初學者也比較友好。

  Python中包含錯誤和異常兩種情況,錯誤主要是常見的語法錯誤SyntaxError,並且在錯誤提示中會有倒三角箭頭的修改指示位置;python中的另外一種錯誤提醒叫做異常,指的是在語法和表達式上並沒有錯誤,運行時會發生錯誤的情況。在python中,語法錯誤是直接顯示在相關終端視窗,而異常可以進行錯誤提示,也可以進行捕捉處理。

1 ##如下方代碼不完整,則會報出語法錯誤的提示
2 def foo:
3     
4     #下方為內容錯誤的信息提示
5     def foo:
6     
7     SyntaxError: invalid syntax

  因為在程式執行時,異常報錯提示可能會影響到輸出結果的顯示,此時就可以使用try:...except:...進行異常處理,將錯誤直接輸出列印,而不是以報錯的形式顯示。在python中有很多不同的異常提示方法,官方成為異常類,所有異常類都基於BaseException。大家也可以在官方文檔中查看詳細的繼承關係圖,在一般處理異常的情況下,大多使用Exception與其子類異常,如下就是使用Exception輸出程式執行異常的代碼示例。

1 try:
2     #被除數不能為0,相關錯誤類型為ZeroDivisionError
3     print(1/0)
4 #使用Exception可以將錯誤信息直接輸出
5 except Exception as e:
6     print(e)

  使用Exception下的NameError代碼示例:

1 try:
2     print(a)
3 except NameError as n:
4     print(n)

  還有一些異常錯誤信息是模塊中自帶的錯誤,比如urllib.error中的HTTPError和URLError,以及json中的JSONDecodeError等。查看底層實現源碼可以看出這些異常也是基於Exception,相當於這些模塊主動拋出一個自定義的異常信息,所以也是可以通過Exception進行輸出。

  既然在模塊可以從代碼中實現主動拋出異常錯誤信息,那我們也可以根據自己的需求去拋出相應的異常提示信息。這時候就使用到了raise,代碼示例如下,我們可以在raise中添加一個基類,緊挨基類去添加一個關於異常信息的提示,提示內容可以為漢語,但是儘量不要使用。

1 #raise相關用法
2 try:
3     aaa
4 except BaseException as e:
5     #raise 拋出異常,自定義錯誤的說明
6     raise SyntaxError('Syntax Error') from e
7 #輸出的錯誤結果信息為:變數a未被定義,和主動拋出的異常及說明

  try:...except:...語句還可以結合finally進行使用,無論輸出try語句中的正確代碼,還是輸出except中的錯誤信息,finally都會進行輸出列印輸出

1 #finally的用法
2 try:
3     aaa
4     print(1/1)
5 except Exception as e:
6     print(e)
7 #只要有finally,無論正常執行還是報錯,都會執行finally中的內容
8 finally:
9     print(123)

  try:...except:..除了可以使用raise拋出異常,和finally進行結合使用,還可以結合else進行使用,else用來返回輸出正確信息,但正確內容大多寫在try語句中,所以else並不常用;try:...except:..語句也可以根據實際情況添加多個except進行處理不同的異常信息,關於更多的用法,大家還可以通過“百度一下”學習更多內容。

  以上內容主要幫助大家使用try:...except:...處理異常的方法,如果不清楚使用哪一種異常方法,可以使用通用異常Exception,也可以在except中列印自己定義的錯誤信息。在出現異常的情況下程式有可能會中斷執行,而使用異常處理,則可以跳過這些異常繼續執行正確的代碼;異常處理也可以添加自定義的錯誤信息,在工作中方便與同事之間的配合,這些都是使用異常處理的好處。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為實際java開發經驗還不到一年的我,第一次寫博客,誠惶誠恐,怕把自己的謬誤公之於眾,誤人子弟,不過轉念一想,若是能有同行加以指點評判,將他們的真知灼見描述出來,那這篇文章就算拋轉引玉了。 最近在閱讀《Java編程思想》有關介面的最後一小節中,作者提出了工廠設計模式,用來解決 生成實現某個介面的對 ...
  • 才開通博客沒幾天,不知道寫什麼東西,就把最近在項目中做的東西分享一下,開通博客也可以監督一下自己,技術的路很遙遠,希望能通過寫博客來讓自己走的更遠。 一般在web項目中都需要定義一個全局異常來處理一些業務方面的異常,下麵是自定義異常的一些代碼。 1.自定義一個異常,然後繼承RuntimeExcept ...
  • 線性表的鏈式存儲 鏈式結構存儲密度小,存儲空間利用率低 只能順序存儲(其中指針域用來表明節點間的關係) 插入和刪除操作方便 代碼如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef int ElemType; 4 5 typedef str ...
  • 在MyBatis中MapperProxyFactory,MapperProxy,MapperMethod是三個很重要的類。 弄懂了這3個類你就大概清楚Mapper介面與SQL的映射, 為什麼是介面,沒有實例類也可以完成註入或者調用。 其中MapperMethod可以參考:MapperMethod源碼 ...
  • 用到的: import uuid uuid是128位的全局唯一標識符, 通常用32位的一個字元串的形式來表現 uuid.uuid1() 基於MAC地址,時間戳,隨機數來生成唯一的uuid,可以保證全球範圍內的唯一性 uuid.uuid3() 通過計算一個命名空間和名字的md5散列值來給出一個uuid ...
  • 前言 在 "上一篇" 中我們學習了創建型模式的建造者模式和原型模式。本篇則來學習下結構型模式的適配器模式和橋接模式。 適配器模式 簡介 適配器模式是作為兩個不相容的介面之間的橋梁。這種類型的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。 簡單的來說就是通過某個介面將不相容的兩個類進行相容,俗稱 ...
  • jsp 內置對象 轉發與重定向的比較 重定向和轉發有一個重要的不同:當使用轉發時,JSP容器將使用一個內部的方法來調用目標頁面,新的頁面繼續處理同一個請求,而瀏覽器將不會知道這個過程。 與之相反,重定向方式的含義是第一個頁面通知瀏覽器發送一個新的頁面請求。因為,當你使用重定向時,瀏覽器中所顯示的UR ...
  • 所有文章僅是筆記!都是看網上大神或者視頻學習來的。 一、軟體層面機器碼翻譯(為了吹的牛B:write once run everywhere) 二、記憶體管理:java經久不衰的原因之一 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...