Java開發者的Python快速進修指南:異常捕獲

来源:https://www.cnblogs.com/guoxiaoyu/archive/2023/11/21/17832695.html
-Advertisement-
Play Games

在本篇文章中,我們總結了Python中的異常捕獲的重要性以及如何進行優化。異常捕獲是一種處理程式在執行過程中出現錯誤的機制,對於程式的穩定性和可靠性至關重要。我們詳細學習了Python中的基本異常捕獲語法,包括try、except、else和finally塊,並舉例了常見的異常類型,總之,閱讀本文只... ...


在之前的學習中,我們已經講解了函數和控制流等基本概念。然而,在接觸實際業務時,你會發現異常捕獲也是必不可少的一部分,因為在Java編程中,異常處理是不可或缺的。Python的異常捕獲與Java的異常捕獲原理是相同的,只是在寫法上有一些區別。它們的目的都是為了處理程式在執行過程中出現錯誤的機制。通過捕獲異常,我們可以在遇到錯誤時進行適當的處理,而不是直接終止程式的執行。

在接下來的內容中,我將介紹一些常見的異常情況,以及萬能異常捕獲(在工作中常常使用,即無論什麼錯誤都直接拋出一個通用異常),還有為了處理業務邏輯而自定義的異常類。

基本語法

需要註意的是,在Python中,else塊和finally塊是可選的。你可以選擇將它們完全寫在try語句塊里,就像在Java中一樣。關於這一點,我就不再詳細解釋了。

try:
    # 可能引發異常的代碼塊
except ExceptionType1:
    # 處理ExceptionType1類型的異常
except ExceptionType2:
    # 處理ExceptionType2類型的異常
else:
    # 如果沒有發生任何異常,執行該塊的代碼
finally:
    # 無論是否發生異常,都會執行該塊的代碼

常見異常

就舉一個異常例子吧,不多說占用精力了,自己有時間現查詢百度都行。舉例來說,當我們嘗試將一個非整數的字元串轉換為整數時,會觸發ValueError異常。下麵是一個處理ValueError異常的示例代碼:

try:
    num = int(input("請輸入一個整數: "))
    print("你輸入的整數是:", num)
except ValueError:
    print("無效的輸入,請輸入一個整數")

其他常見異常:

  • TypeError:類型錯誤,當一個操作或函數應用於不適當類型的對象時拋出。
  • IndexError:索引錯誤,當嘗試訪問一個不存在的索引時拋出。
  • KeyError:鍵錯誤,當嘗試訪問字典中不存在的鍵時拋出。
  • FileNotFoundError:文件未找到錯誤,當試圖打開一個不存在的文件時拋出。
  • ZeroDivisionError:零除錯誤,當嘗試除以零時拋出。

萬能異常捕獲

我覺得使用萬能異常捕獲也是一種優化語句的方法。就像在Java中一樣,直接捕獲Exception異常可以處理所有可能的異常情況,這種做法也很容易記住。不過需要註意的是,雖然這種方式可以簡化代碼,但有時候會隱藏潛在的問題,因此在實際使用時還是需要謹慎考慮。

try:
    # 可能引發異常的代碼塊
except Exception as e:
    # 處理異常的代碼塊

自定義異常

寫自定義異常時,你會發現跟Java一樣的思路,這就是為什麼從Java轉向Python的過程非常簡單。你已經具備了各種能力,只需要用另一種語法重新實現一次即可。事實上,所有的編程語言都有相似之處,包括前端的Vue、React等框架也是如此。這意味著你可以在不同的語言中迅速適應和轉換,因為它們之間存在共通的原理和概念。所以,只要你理解了一種編程語言,學習和掌握其他語言就會變得更加容易。

class MyException(Exception):
    def __init__(self, message):
        self.message = message

    def __str__(self):
        return self.message

try:
    # 可能引發自定義異常的代碼塊
    raise MyException("This is a custom exception.")
except MyException as e:
    # 處理自定義異常的代碼塊
    print(e)

直接拋出Exception確實是一種簡潔的寫法。如果時間緊迫或者只是臨時測試代碼,這樣做可以省去定義自定義異常的步驟。不過,需要註意的是,直接拋出Exception會導致代碼的可讀性和可維護性降低。定義自定義異常可以更好地表達代碼的意圖,並且提供了更好的錯誤信息和異常處理方式。所以,在實際項目中,我建議還是儘可能使用自定義異常來提高代碼的可讀性和可維護性。

總結

在本篇文章中,我們總結了Python中的異常捕獲的重要性以及如何進行優化。異常捕獲是一種處理程式在執行過程中出現錯誤的機制,對於程式的穩定性和可靠性至關重要。我們詳細學習了Python中的基本異常捕獲語法,包括try、except、else和finally塊,並舉例了常見的異常類型,總之,閱讀本文只需5分鐘,你就可以輕鬆掌握Python異常捕獲的技巧,為自己的編程之路增添一份寶貴的經驗。


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

-Advertisement-
Play Games
更多相關文章
  • keycloak目前提供了幾種分散式緩存,我們自己的緩存,如果希望是分散式的,可以將緩存添加到以下幾個緩存里即可 actionTokens clientSessions loginFailures offlineClientSessions offlineSessions sessions work ...
  • 一、讀取寫入視頻文件 1 import cv2 2 3 # 創建一個視屏捕獲對象 4 videoCapture = cv2.VideoCapture('AVI.avi') 5 6 # 獲取視頻的屬性值,cv2.CAP_PROP_FPS獲取視頻幀率 7 fps = videoCapture.get(c ...
  • 題目: 給你兩個按 非遞減順序 排列的整數數組 nums1 和 nums2,另有兩個整數 m 和 n ,分別表示 nums1 和 nums2 中的元素數目。 請你 合併 nums2 到 nums1 中,使合併後的數組同樣按 非遞減順序 排列。 註意:最終,合併後數組不應由函數返回,而是存儲在數組 n ...
  • AcWing 演算法基礎課week 1 總結 總結點 1:快速排序(分治思想) 題1:從小到大排序 主體思路:定義一個數x屬於數組s,利用雙指針,將數組分為大於等於x和小於等於x的兩部分,然後遞歸處理。(具體步驟如下) 1. 如上圖所示,我們定義一個數組s用來儲存n個數據,然後定義兩個指針i j,分別 ...
  • Assistants介紹 隨著OpenAI將Assistants助手API對外發佈,我們搭建個人知識庫變的如此簡單。開發者將自己的應用通過Assistants API與OpenAI對接,就可以讓每一位客戶擁有不一般體驗的個人知識庫。由於Assistants相關API有30+,本文只列舉完成一個最小功 ...
  • 事務是保證業務操作完整性的一種資料庫機制,具有原子性、一致性、隔離性和持久性(ACID)的特點。 在Java中,可以通過JDBC和MyBatis來控制事務,底層都是通過Connection對象完成的。 Spring使用AOP的方式進行事務開發,通過將事務的額外功能封裝在DataSourceTrans... ...
  • 事件緣起我在Linux伺服器(CentOS 7.8)安裝Python3.10,並替換python軟鏈接為python3之後,yum命令不可用。特此記錄一下。 完整安裝步驟如下: Python3.10安裝 1.使用yum程式提前安裝Python依賴。 yum install wget zlib-dev ...
  • 作者:FishBones 鏈接:https://juejin.cn/post/7185479136599769125 背景 公司的一個ToB系統,因為客戶使用的也不多,沒啥併發要求,就一直沒有經過壓測。這兩天來了一個“大客戶”,對併發量提出了要求:核心介面與幾個重點使用場景單節點吞吐量要滿足最低50 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...