Day 25:異常處理

Day 25: Python異常處理機制

Review

上一節主要是熟悉ospython中的文件操作,包含:

  • 基礎操作:目錄獲取、文件列舉、路徑拼接
  • 系統交互:環境變量管理、跨平臺兼容性
  • 高級功能:目錄樹遍歷、文件系統分析

Today

今天專注于Python的異常處理機制。在借助AI寫代碼時,經常會遇到try-except的異常處理模塊。這是因為大部分大模型在后訓練階段都經過強化學習訓練,為了確保結果的正確運行,采用try-except異常處理能提高模型運行成功的概率。

異常處理機制概述

Python的異常處理機制為程序提供了強大的容錯能力(fault tolerance)。當程序在運行時遇到意外情況(即異常),它不會直接崩潰,而是可以被設計成優雅地處理這些錯誤。

當異常發生時,Python會創建一個異常對象(exception object)。如果這段可能出錯的代碼位于try語句塊中,程序流程會尋找并跳轉到匹配的except語句塊來處理這個異常。

常見的Python異常類型

1. SyntaxError(語法錯誤)

  • 原因:代碼不符合Python的語法規則,解釋器在解析代碼時就會失敗
  • 特點:在程序運行之前就會被檢測到
# 示例:缺少冒號
# def my_function()
#     print("Hello")

2. NameError(名稱錯誤)

  • 原因:嘗試使用一個未被定義的變量、函數或對象
# print(some_undefined_variable)  # 變量未定義

3. TypeError(類型錯誤)

  • 原因:對不支持該操作的數據類型執行了某個操作
# print("Age: " + 25)  # 字符串和整數不能直接相加

4. ValueError(值錯誤)

  • 原因:函數接收到的參數類型正確,但其值不合適
# number = float("12.34.56")  # 不是有效的浮點數表示

5. IndexError(索引錯誤)

  • 原因:嘗試訪問序列中不存在的索引
# data = ("apple", "banana")
# print(data[2])  # 索引超出范圍

6. KeyError(鍵錯誤)

  • 原因:嘗試訪問字典中不存在的鍵
# student_grades = {"math": 90, "science": 85}
# print(student_grades["history"])  # 鍵不存在

7. AttributeError(屬性錯誤)

  • 原因:嘗試訪問對象沒有的屬性或方法
# a_string = "hello"
# print(a_string.length)  # 應該用 len(a_string)

8. ZeroDivisionError(除零錯誤)

  • 原因:嘗試將數字除以零
# result = 10 / 0

9. FileNotFoundError(文件未找到錯誤)

  • 原因:嘗試打開不存在的文件或路徑不正確
# import pandas as pd
# data = pd.read_csv("nonexistent.csv")

10. ModuleNotFoundError(模塊未找到錯誤)

  • 原因:嘗試導入不存在的模塊
# import nonexistent_module

錯誤信息的解讀

當代碼出現錯誤時,程序會打印出"traceback"(回溯信息),包含:

  1. 錯誤類型(如NameError, TypeError)
  2. 錯誤發生的文件名和行號
  3. 導致錯誤的代碼行
  4. 錯誤的簡要描述

try-except基本用法

# 基本結構
try:# 可能會引發異常的代碼result = numerator / denominator
except ZeroDivisionError:# 當發生除零錯誤時執行print("錯誤:除數不能為零!")result = "未定義"

捕獲多種異常

def safe_divide(a, b):try:result = a / bexcept ZeroDivisionError:print("錯誤:除數不能為零!")return Noneexcept TypeError:print("錯誤:輸入必須是數字!")return Noneelse:# 只有當try塊成功執行時才會執行print(f"計算成功,結果是: {result}")return result

try-except-else-finally完整結構

try:# 可能引發異常的代碼file = open('data.txt', 'r')data = file.read()
except FileNotFoundError:# 處理文件不存在的情況print("文件未找到")data = None
else:# try成功時執行print("文件讀取成功")process_data(data)
finally:# 無論如何都會執行(清理資源)if 'file' in locals() and not file.closed:file.close()print("文件已關閉")

finally在ML/DL項目中的應用

finally子句的"保證執行"特性在機器學習和深度學習項目中特別重要:

  1. 日志文件管理:確保訓練日志被正確保存
  2. 計算資源釋放:GPU內存、分布式計算資源的釋放
  3. 數據庫連接關閉:避免連接泄漏
  4. 全局狀態恢復:恢復修改過的配置或環境變量
  5. 檢查點保存:訓練中斷時保存模型狀態
# ML訓練示例
try:model = load_model()model.train(epochs=100)
except KeyboardInterrupt:print("訓練被中斷")
except RuntimeError as e:print(f"訓練錯誤: {e}")
else:print("訓練成功完成")save_final_model(model)
finally:# 無論如何都要執行的清理工作save_checkpoint(model)release_gpu_memory()close_tensorboard_writer()

最佳實踐建議

  1. 具體化異常類型:避免使用裸露的except,應指定具體的異常類型
  2. 記錄錯誤信息:在except塊中記錄詳細的錯誤信息,便于調試
  3. 適度使用:不要過度使用異常處理來控制正常的程序流程
  4. 資源管理:優先使用with語句進行資源管理,它隱式使用了finally機制

小結

異常處理是Python編程的重要組成部分。通過合理使用try-except-else-finally結構,我們可以:

  • 提高程序的健壯性和用戶體驗
  • 優雅地處理各種錯誤情況
  • 確保資源被正確釋放
  • 在ML/DL項目中構建更穩定的訓練流程

浙大疏錦行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91127.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache Ignite 的分布式隊列(IgniteQueue)和分布式集合(IgniteSet)的介紹

以下的內容是關于 Apache Ignite 的分布式隊列(IgniteQueue)和分布式集合(IgniteSet) 的介紹。它們是 Ignite 提供的分布式數據結構,讓你可以在整個集群中像使用本地 BlockingQueue 或 Set 一樣操作共享的數據。 下面我…

HTML5 `<figure>` 標簽:提升網頁語義化與可訪問性的利器

目錄什么是 <figure> 標簽&#xff1f;為什么我們要用 <figure>&#xff1f;<figure> 標簽的語法<figure> 標簽的適用場景1 圖片及其說明 (最常用)2 代碼片段及其注釋3 圖表、流程圖或數據可視化4 引用或引文 (Quote) 及其出處總結在現代網頁開發中&am…

計算機網絡五層模型

我們常說的“計算機網絡五層協議模型”&#xff0c;是一個實際應用中廣泛采用的簡化模型&#xff08;介于OSI七層&#xff08;Open System Interconnect&#xff09;與TCP/IP四層之間&#xff09;&#xff0c;用于描述網絡通信中各層的職責與作用。 文章目錄第5層&#xff1a;應…

數據開源 | “白虎”數據集首批開源,邁出百萬數據征途第一步

“白虎”數據集首批開源 在機器人智能不斷邁向自主化、通用化的進程中&#xff0c;如何解決人形機器人的“喂養”難題、走出“數據荒漠”&#xff0c;已成為具身智能領域亟需攻克的關鍵課題。為此&#xff0c;2025 年初&#xff0c;全國首個異構人形機器人訓練場在模力社區正式…

第17章——多元函數積分學的預備知識

文章目錄思維導圖場論初步方向導數梯度散度與旋度今日格言&#xff1a;如果凡事缺少了實行的勇氣&#xff0c;再有智慧與仁愛也是枉然。思維導圖 場論初步 場就是空間區域ΩΩΩ上的一種對應法則。可分為&#xff1a;數量場和向量場。 比如一個數量函數uu(x,y,z)uu(x,y,z)uu(x…

Vue》》Slot 插槽

插槽的概念 插槽就是子組件中的提供給父組件使用的一個占位符&#xff0c;用slot標簽 表示&#xff0c;父組件可以在這個占位符中填充任何模板代碼&#xff0c;如 HTML、組件等&#xff0c;填充的內容會替換子組件的slot標簽。簡單理解就是子組件中留下個“坑”&#xff0c;父組…

AKS部署.Net Shopping(K8S本地部署/AKS部署/key-value)

文章目錄 項目地址 一、Api配置修改 1.1 配置docker 1. docker-compose配置環境變量 2. 修改appsettings 二、本地k8s部署 2.1 將本地鏡像Push到dockerHub 2.2 制作K8S yaml文件 1. mogodb 2. shopping api 3. shoppingclient 3. port補充 4. Service 的type 三、部署到AKS 3.1…

vue3 el-table 去除小數

在 Vue 3 中使用 Element Plus 的 <el-table> 組件時&#xff0c;如果你希望去除表格列中的小數&#xff0c;你可以通過幾種方式來實現&#xff1a;1. 使用 formatter 屬性<el-table-column> 組件的 formatter 屬性允許你自定義單元格的顯示格式。你可以使用這個屬…

JavaScript數組去重性能優化:Set與Object哈希表為何效率最高

文章目錄 數組去重性能優化:為什么Set和Object哈希表的效率最高 引言 一、數組去重的常見方法 1.1 雙重循環法 1.2 indexOf/includes方法 1.3 排序后相鄰比較法 1.4 filter + indexOf方法 1.5 使用Set數據結構 1.6 使用Object哈希表 二、性能對比分析 2.1 時間復雜度對比 2.2 …

在VS Code中克隆項目失敗

前提條件&#xff1a;電腦中已經安裝好了Git一、錯誤原因&#xff1a;1、打開命令面板 快捷鍵 CtrlShiftP&#xff0c;輸入Git: Clone 并回車&#xff1b;2、輸入倉庫URL回車后就發現報錯了可以看到最后一行的報錯內容&#xff1a;Git 無法找到或讀取 SSL 證書文件&…

ASP.NET Core MVC中taghelper的ModelExpression詳解

Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression 是 ASP.NET Core MVC 框架中的一個核心類型&#xff0c;用于表示對模型屬性的強類型引用。它在 Razor 視圖、表單綁定和自定義 Tag Helper 中扮演關鍵角色&#xff0c;下面從技術細節、應用場景和最佳實踐三個方面詳細解…

樓宇 3D 建模:驅動建筑領域革新的數字力量

在科技飛速發展的當下&#xff0c;數字化技術正深刻改變著各個行業&#xff0c;建筑領域也不例外。樓宇 3D 建模作為關鍵的數字化技術&#xff0c;逐漸成為建筑設計、施工和管理過程中不可或缺的工具。它通過將現實中的樓宇以三維數字模型呈現&#xff0c;為建筑行業帶來前所未…

打通視頻到AI的第一公里:輕量RTSP服務如何重塑邊緣感知入口?

在 AI 系統大規模部署、設備邊緣化、數據實時化趨勢下&#xff0c;視頻能力的部署方式正迎來深刻變革。2025世界人工智能大會&#xff08;WAIC&#xff09;上&#xff0c;視頻感知與智能決策之間的“連接效率”成為關鍵話題。而在這場連接能力的競爭中&#xff0c;輕量級、標準…

旅行短視頻模糊的常見原因及應對方法

在旅行中拍攝短視頻時&#xff0c;你是否經常遇到這樣的問題&#xff1a;明明景色很美&#xff0c;但拍出來的視頻卻模糊不清&#xff0c;色彩暗淡&#xff0c;甚至噪點嚴重&#xff1f;尤其是在弱光環境&#xff08;如夜景、洞穴&#xff09;或快速移動&#xff08;如航拍、運…

【基礎篇四】ASGI:Python異步Web的新標準

目錄 一、ASGI規范深度解析 1.1 ASGI的誕生背景 1.2 ASGI核心概念 1.3 ASGI規范版本演進 二、WSGI vs ASGI&#xff1a;深度對比分析 2.1 架構模式對比 2.2 性能特性對比 2.3 適用場景分析 三、ASGI支持的協議類型 3.1 HTTP協議支持 3.1.1 HTTP處理流程 3.2 HTTP S…

51 單片機單文件多文件結構工程模板的創建教程

本章將詳細介紹KEIL C51軟件的使用方法及51單片機工程的創建流程。通過本章學習&#xff0c;掌握建立51單片機工程模板的技能&#xff0c;為后續51 單片機編程學習奠定基礎。 單文件與多文件結構對比 對比項單文件結構多文件結構項目規模小項目、實驗項目中大型項目、正式開發…

【Git】實用Git操作指南:從入門到高效協作

目錄 1. Git 工作流程圖 2. 基本配置 3. 獲取本地倉庫 4. 基礎操作 5. 分支 6. Git遠程倉庫 6.1 常用的托管服務[遠程倉庫] 6.2 注冊碼云 6.3創建遠程倉庫 6.4 配置SSH公鑰 6.5 操作遠程倉庫 7. 在IDEA中使用Git 附&#xff1a;鐵令 下載地址&#xff1a;Git - Downloads 安裝&…

InstructBLIP:通過指令微調邁向通用視覺-語言模型

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" InstructBLIP&#xff1a;通過指令微調邁向通用視覺-語言模型 摘要 大規模預訓練和指令微調在構建通用語言模型方面取得了顯著成功。然而&#xff0c;構建通用視覺-語言模型仍然面臨挑戰&#xff0c;這主要源于…

[python][flask]flask藍圖使用方法

在 Flask 中&#xff0c;藍圖&#xff08;Blueprint&#xff09;是一種用于組織和管理代碼的機制&#xff0c;可以將應用分解為多個模塊&#xff0c;每個模塊專注于特定的功能。以下是使用藍圖的基本步驟和方法&#xff1a;1. 創建藍圖首先&#xff0c;需要創建一個藍圖對象。藍…