全網最適合入門的物件導向程式設計教程:28 異常捕獲-Python程式設計原則、哲學和規範大彙總

FreakStudio發表於2024-07-30

全網最適合入門的物件導向程式設計教程:28 類和物件的 Python 實現-Python 程式設計原則、哲學和規範大彙總

image

摘要:

本文主要介紹了在使用 Python 進行物件導向程式設計時,Python 異常處理的原則-“請求諒解,而非許可”,以及軟體設計和 Python 的程式設計原則,同時介紹了 PEP8 規範。

原文連結:

FreakStudio的部落格

往期推薦:

學嵌入式的你,還不會物件導向??!

全網最適合入門的物件導向程式設計教程:00 物件導向設計方法導論

全網最適合入門的物件導向程式設計教程:01 物件導向程式設計的基本概念

全網最適合入門的物件導向程式設計教程:02 類和物件的 Python 實現-使用 Python 建立類

全網最適合入門的物件導向程式設計教程:03 類和物件的 Python 實現-為自定義類新增屬性

全網最適合入門的物件導向程式設計教程:04 類和物件的Python實現-為自定義類新增方法

全網最適合入門的物件導向程式設計教程:05 類和物件的Python實現-PyCharm程式碼標籤

全網最適合入門的物件導向程式設計教程:06 類和物件的Python實現-自定義類的資料封裝

全網最適合入門的物件導向程式設計教程:07 類和物件的Python實現-型別註解

全網最適合入門的物件導向程式設計教程:08 類和物件的Python實現-@property裝飾器

全網最適合入門的物件導向程式設計教程:09 類和物件的Python實現-類之間的關係

全網最適合入門的物件導向程式設計教程:10 類和物件的Python實現-類的繼承和里氏替換原則

全網最適合入門的物件導向程式設計教程:11 類和物件的Python實現-子類呼叫父類方法

全網最適合入門的物件導向程式設計教程:12 類和物件的Python實現-Python使用logging模組輸出程式執行日誌

全網最適合入門的物件導向程式設計教程:13 類和物件的Python實現-視覺化閱讀程式碼神器Sourcetrail的安裝使用

全網最適合入門的物件導向程式設計教程:全網最適合入門的物件導向程式設計教程:14 類和物件的Python實現-類的靜態方法和類方法

全網最適合入門的物件導向程式設計教程:15 類和物件的 Python 實現-__slots__魔法方法

全網最適合入門的物件導向程式設計教程:16 類和物件的Python實現-多型、方法重寫與開閉原則

全網最適合入門的物件導向程式設計教程:17 類和物件的Python實現-鴨子型別與“file-like object“

全網最適合入門的物件導向程式設計教程:18 類和物件的Python實現-多重繼承與PyQtGraph串列埠資料繪製曲線圖

全網最適合入門的物件導向程式設計教程:19 類和物件的 Python 實現-使用 PyCharm 自動生成檔案註釋和函式註釋

全網最適合入門的物件導向程式設計教程:20 類和物件的Python實現-組合關係的實現與CSV檔案儲存

全網最適合入門的物件導向程式設計教程:21 類和物件的Python實現-多檔案的組織:模組module和包package

全網最適合入門的物件導向程式設計教程:22 類和物件的Python實現-異常和語法錯誤

全網最適合入門的物件導向程式設計教程:23 類和物件的Python實現-丟擲異常

全網最適合入門的物件導向程式設計教程:24 類和物件的Python實現-異常的捕獲與處理

全網最適合入門的物件導向程式設計教程:25 類和物件的Python實現-Python判斷輸入資料型別

全網最適合入門的物件導向程式設計教程:26 類和物件的Python實現-上下文管理器和with語句

全網最適合入門的物件導向程式設計教程:27 類和物件的Python實現-Python中異常層級與自定義異常類的實現

更多精彩內容可看:

給你的 Python 加加速:一文速通 Python 平行計算

一文搞懂 CM3 微控制器除錯原理

肝了半個月,嵌入式技術棧大彙總出爐

電子計算機類比賽的“武林秘籍”

一個MicroPython的開源專案集錦:awesome-micropython,包含各個方面的Micropython工具庫

文件和程式碼獲取:

可訪問如下連結進行對文件下載:

https://github.com/leezisheng/Doc

image

本文件主要介紹如何使用 Python 進行物件導向程式設計,需要讀者對 Python 語法和微控制器開發具有基本瞭解。相比其他講解 Python 物件導向程式設計的部落格或書籍而言,本文件更加詳細、側重於嵌入式上位機應用,以上位機和下位機的常見串列埠資料收發、資料處理、動態圖繪製等為應用例項,同時使用 Sourcetrail 程式碼軟體對程式碼進行視覺化閱讀便於讀者理解。

相關示例程式碼獲取連結如下:https://github.com/leezisheng/Python-OOP-Demo

正文

Python 異常處理原則“請求諒解,而非許可”

我們可能不難發現異常處理完全可以用 if...elif...else 結構來完成,那為什麼還要使用異常呢?實際上,Python 程式設計師通常秉持著“請求諒解,而非許可”的原則,即他們首先執行程式碼,然後解決出現的錯誤。另一種與之相反的“三思而後行”的原則,實際上恰恰相反。

這樣做有很多理由,但最主要的一點是,避免不必要的 CPU 資源消耗在檢查極少出現的情況上。因此,對於極少數的例外情況,使用異常處理是明智之舉。進一步探討這一點,我們可以發現異常處理的語法在流程控制中同樣非常有效。就像 if 語句一樣,異常可以用於決策、分支和資訊傳遞。在 Python 程式碼中,面對可能出現的錯誤情況,相比於各種各樣的判斷,使用異常處理結構更容易閱讀和維護。

軟體設計的六大原則

  1. 開放封閉原則(Open-Closed Principle, OCP)

    • 軟體實體(類、模組、函式等)應對擴充套件開放,對修改關閉
    • 透過抽象和繼承等機制實現
  2. 里氏替換原則(Liskov Substitution Principle, LSP)

    • 子類可以透明地替換父類使用
    • 子類與父類的引數和返回值應一致
  3. 依賴倒置原則(Dependency Inversion Principle, DIP)

    • 高層模組不應依賴低層模組,二者都依賴抽象
    • 抽象不應依賴細節,細節應依賴抽象
  4. 介面隔離原則(Interface Segregation Principle, ISP)

    • 客戶端不應依賴它不需要的介面
    • 介面應保持單一和最小粒度
  5. 迪米特法則(Law of Demeter, LoD)

    • 一個軟體實體應當儘可能少地與其他實體發生相互作用
    • 高內聚,低耦合
  6. 單一職責原則(Single Responsibility Principle, SRP)

    • 一個類應該僅有一個引起它變化的原因
    • 職責應該明確,避免重複

Python 六大程式設計原則

  1. KISS (Keep It Simple, Stupid)

    • 保持程式碼簡單明瞭,儘量避免複雜的設計
    • 簡單易懂的程式碼更容易編寫、維護和除錯
  2. DRY (Don't Repeat Yourself)

    • 避免重複程式碼,利用函式、模組等特性進行抽象和封裝
    • 減少重複勞動,提高編碼效率
  3. Pythonic

    • 充分利用 Python 的語法特性和標準庫
    • 遵循 PEP 8 等 Python 編碼規範,編寫優雅、高效的程式碼
  4. Zen of Python

    • 遵循 Python 的 20 條設計哲學原則,如"美勝於醜"、"明確勝於隱晦"等
      • Beautiful is better than ugly.
      • Explicit is better than implicit.
      • Simple is better than complex.
      • Complex is better than complicated.
      • Flat is better than nested.
      • Sparse is better than dense.
      • Readability counts.
      • Special cases aren't special enough to break the rules.
      • Although practicality beats purity.
      • Errors should never pass silently.
      • Unless explicitly silenced.
      • In the face of ambiguity, refuse the temptation to guess.
      • There should be one-- and preferably only one --obvious way to do it.
      • Although that way may not be obvious at first unless you're Dutch.
      • Now is better than never.
      • Although never is often better than right now.
      • If the implementation is hard to explain, it's a bad idea.
      • If the implementation is easy to explain, it may be a good idea.
      • Namespaces are one honking great idea -- let's do more of those!
      • Python is designed to be readable, and, well, Pythonic.
    • 體現 Python 崇尚簡單、優雅的理念
  5. Testing Is Important

    • 重視測試驅動開發,編寫全面的單元測試和整合測試
    • 確保程式碼質量,方便重構和維護
  6. Batteries Included

    • 充分利用 Python 豐富的標準庫和第三方庫
    • 減少重複造輪子,提高開發效率

PEP8 規範

PEP 8 是 Python 程式設計的事實標準程式碼風格指南,其主要內容包括:

  1. 命名約定

    • 變數、函式、模組使用小寫字母加下劃線
    • 類名使用駝峰式命名
    • 常量全部大寫
    • 受保護的例項屬性以單個下劃線開頭
    • 私有的例項屬性以兩個下劃線開頭
  2. 縮排和空白

    • 使用 4 個空格作為縮排單位
    • 頂層函式和類定義之間空兩行
    • 二元運算子兩側各加一個空格
  3. 匯入風格

    • 每個 import 語句獨佔一行
    • 匯入順序為:標準庫、第三方庫、自定義庫
  4. 行長限制

    • 每行不超過 79 個字元
    • 如果超出可以使用括號換行
  5. 註釋和文件化

    • 使用英文編寫註釋和文件
    • 函式使用 docstring 描述
  6. 其他建議

    • 不要使用製表符進行縮排
    • 避免使用單字母變數名
    • 慎用 from module import *

PEP 8 的目的是透過一致的程式碼風格來提高程式碼的可讀性和可維護性。遵守這些約定可以讓 Python 程式碼更加 Pythonic。

PEP 8 規範原文可在如下連結檢視:

https://peps.python.org/pep-0008/

image

中文版可在如下連結檢視:

https://www.cnblogs.com/bymo/p/9567140.html

image

image

相關文章