python學習進階之異常和文件操作(三)

文章目錄

  • 1.程序異常
  • 2.文件操作
  • 3.json操作

1.程序異常

1.1 異常

  • 異常概念: 程序在運行時, 如果Python解釋器遇到到一個錯誤, 則會停止程序的執行, 并且提示一些錯誤信息, 這就是異常

  • 拋出異常: 程序停止執行并且提示錯誤信息這個動作, 通常稱之為拋出(raise) 異常

  • 提示:程序開發時,很難將所有的特殊情況都處理的面面俱到 ,通過異常捕獲可以針對突發事件做集中的處理,從而 保證程序的穩定性和健壯性 。在自動化測試過程中, 也可以借助捕獲異常操作, 完成類 似: 用例執行報錯時截圖、打印日志信息等操作

1.2 異常捕獲

  • 基本語法:

    • try:嘗試,下方編寫要嘗試代碼,不確定是否能夠正常執行的代碼
    • except:如果有異常捕獲,下方編寫捕獲到異常,處理失敗的代碼
    try:# 嘗試執行的代碼
    except:# 出現異常時執行的代碼
    
  • 案例:

    def input_num():"""定義輸入數據函數"""try:num = int(input('請輸入數字:'))print('獲取的數據為: {}'.format(num))except:print('請輸入正確數據!')if __name__ == '__main__':input_num()# 運行結果
    請輸入數字:肥腸粉  # 輸入錯誤的數據
    請輸入正確數據!
    
  • 完整語法:

    try:xxx代碼pass
    except 錯誤類型1:# 針對錯誤類型1,對應的代碼處理pass
    except 錯誤類型2:# 針對錯誤類型2,對應的代碼處理pass
    except Exception as e:# 打印錯誤信息print(e)
    finally:# 無論是否有異常,都會執行的代碼pass
    
  • 案例

    def input_num():"""定義輸入數據函數"""try:num = int(input('請輸入數字:'))except ValueError:print('輸入錯誤!')else:if num % 2 == 0:print('獲取的數據為: {}, 是偶數!'.format(num))else:print('獲取的數據為: {}, 是奇數!'.format(num))finally:print('程序運行結束!')if __name__ == '__main__':input_num()# 運行結果
    # 輸入1的結果
    請輸入數字:1
    獲取的數據為: 1, 是奇數!
    程序運行結束!# 輸入2的結果
    請輸入數字:2
    獲取的數據為: 2, 是偶數!
    程序運行結束!# 輸入異常數據"test"的結果
    請輸入數字:test
    輸入錯誤!
    程序運行結束!
    

1.3 特定異常

  • 說明:

    • 捕獲特定異常類型, 能夠實現僅在特定異常類型出現時, 代碼再做對應的處理
    • 具體的異常類型可以先行從代碼執行的報錯信息中獲取, 在設置捕獲異常操作
  • 語法格式

    try:# 嘗試執行的代碼
    except 異常類型:# 出現異常時執行的代碼
    
  • 案例

    # 需求1. 提示用戶輸入一個整數2. 使用8 除以用戶輸入的整數并且輸出\def input_num():"""定義輸入數據函數"""try:num = int(input("請輸入整數:"))result = 8 / numprint(result)except ValueError:print("請輸入正確的整數")except ZeroDivisionError:print("除 0 錯誤")if __name__ == '__main__':input_num()# 運行結果
    請輸入整數:0    # 輸入數據00 錯誤
    

1.4 未知異常

  • 說明:

    • 如果希望程序無論出現任何錯誤,都不會因為Python解釋器拋出異 常而被終止,可以捕獲Exception
    • except Exception as e: e表示捕獲到的異常對象,記錄異常的錯誤 信息,e為慣用變量名,可以自定義
  • 語法格式

    try:# 嘗試執行的代碼
    except Exception as e: # 出現異常時執行的代碼print('異常信息為: {}'.format(e))
    
  • 案例:

    def input_num():"""定義輸入數據函數"""try:num = int(input("請輸入整數:"))result = 8 / numprint(result)except Exception as e:print("出錯了:{}".format(e))  # 捕獲到異常if __name__ == '__main__':input_num()# 運行結果
    請輸入整數:0
    出錯了:division by zero
    

1.5 異常的傳遞

  • 概念::是指當異常在函數內部被引發但未被捕獲時,會向調用棧的上層傳遞,直到被捕獲或到達程序頂層導致程序終止

  • 案例

    def func1():print("func1開始")func2()print("func1結束")  # 這行之前已經發生異常,所以這行不會執行def func2():print("func2開始")1 / 0  # 引發ZeroDivisionErrorprint("func2結束")  # 這行之前已經發生異常,所以這行不會執行try:func1()
    except ZeroDivisionError as e:print(f"捕獲到異常: {e}")# 運行結果
    func1開始
    func2開始
    捕獲到異常: division by zero

1.6 拋出異常

  • 說明

    • Python 中提供了一個Exception 異常類
    • 在開發時,如果滿足特定業務需求時希望拋出異常,可以:
      • 1)創建一個Exception類的對象
      • 2)使用raise 關鍵字拋出異常對象
  • 語法格式

    # 創建異常對象
    ex = Exception(“異常描述信息”)
    # 拋出異常對象
    raise ex
    
  • 案例

    def outer_func():print("outer_func開始")try:inner_func()except ValueError:print("outer_func捕獲到ValueError")print("outer_func結束")def inner_func():print("inner_func開始")raise ValueError("內部函數引發的錯誤")print("inner_func結束")  # 這行不會執行outer_func()# 運行結果
    outer_func開始
    inner_func開始
    outer_func捕獲到ValueError
    outer_func結束
    

2.文件操作

2.1 文件的概念和類型

  • 概念:可以存儲在長期存儲設備上的一段數據即為文件
  • 類型
    • 文本文件:可以直接使用文本編輯器查看內容的文 件, 例如: Python代碼文件
    • 二進制文件:不可以直接使用文本編輯器查看內容的 文件, 例如: 音頻/視頻/圖片

2.2 文件的操作

  • 操作步驟

    1. 打開文件
    2. 讀、寫文件-  讀將文件內容讀入內存-  寫將內存內容寫入文件
    3. 關閉文件
    
  • 說明: 文件的讀取與寫入, 都推薦使用 with open() 方法, 該方法執行結束后, 會自動關閉文件

    # name: 要訪問的文件路徑及名稱
    # encoding: 設置字符編碼
    # f: 文件對象, 慣用變量名, 可以自定義
    with open(name, encoding='utf8') as f:pass
    
  • 文件寫入/讀取常用模式

    • 'r' :以只讀方式打開文件。這是默認模式。如果文件不存在,拋出異常
    • 'w' :以只寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件
    • 'a' :以追加方式打開文件。如果該文件已存在,在文件末尾追加內容。如果文件不存 在,創建新文件進行寫入
    • rb: 以二進制格式打開一個文件用于只讀
    • wb:以二進制格式打開一個文件只用于寫入
  • 文件讀取方法

    • read() - 讀取整個文件內容

    • readline() - 讀取一行

    • readlines() - 讀取所有行并返回列表

    • 迭代文件對象 - 逐行讀取

      # 方法1:read()
      with open('example.txt', 'r') as f:content = f.read()# 方法2:逐行讀取
      with open('example.txt', 'r') as f:for line in f:print(line.strip())# 方法3:readlines()
      with open('example.txt', 'r') as f:lines = f.readlines()for line in lines:print(line.strip())
      
  • 文件寫入方法

    • write() - 寫入字符串

    • writelines() - 寫入字符串列表

    • 文件寫入實例

      # 寫入單個字符串
      with open('output.txt', 'w') as f:f.write('第一行\n')f.write('第二行\n')# 寫入多行
      lines = ['第一行\n', '第二行\n', '第三行\n']
      with open('output.txt', 'w') as f:f.writelines(lines)
      

2.3 文件與目錄管理

  • 使用 osos.path 模塊
import os# 檢查文件/目錄是否存在
os.path.exists('example.txt')# 獲取文件大小
os.path.getsize('example.txt')# 重命名文件
os.rename('old.txt', 'new.txt')# 刪除文件
os.remove('file_to_delete.txt')# 創建目錄
os.mkdir('new_dir')# 列出目錄內容
os.listdir('.')  # 當前目錄

3.json操作

3.1 json文件

  • JSON的全稱是”JavaScript Object Notation”,是JavaScript對象表示法,它是一種基于文本,獨立于語言的輕量 級數據交換格式

  • 在自動化測試中經常用來存放測試數據,文件后綴名為: .json

  • 提示:其他常見的數據源文件 格式: txt/excel/csv/xml

    {
    "name": "小明","gender": "男","age": 88}
    

3.2 json語法

  • json格式說明

    • {}大括號保存對象

    • []中括號保存數組

    • 對象數組可以相互嵌套

    • 數據采用鍵值對表示

    • 多個數據由逗號分隔

  • json的鍵值

    • :JSON鍵必須是字符串類型, 必須使用英 文雙引號
    • :JSON的值可以是是以下這些
      • 數字(整數或浮點數)
      • 字符串(使用雙引號)
      • 邏輯值(true 和false)
      • 數組(列表)-> []
      • 對象-> {}
      • 空值: null
  • json內容格式

    {"name": "tom","age": 18,"isMan": true,"school": null,"address": {"country": "中國","city": "北京","street": "長安街"},"numbers": [2, 6, 8, 9],"links": [{"name": "Baidu","url": "http://www.baidu.com"},{"name": "TaoBao","url": "http://www.taobao.com"}]}
    

3.3 JSON 數據操作

  • 讀取

    # 導入依賴包
    import json# 讀取JSON文件
    with open('data.json', encoding='UTF-8') as f:# 返回的數據類型為字典或列表data = json.load(f)
    
  • 寫入

    # 導入依賴包
    import json# 寫入JSON
    data = {'name': 'Alice', 'age': 25}
    with open('data.json', 'w') as f:json.dump(data, f)
    
  • 案例1(基本JSON寫入和讀取)

    import json# 準備數據
    data = {"name": "張三","age": 30,"is_student": False,"courses": ["數學", "英語", "計算機"],"address": {"city": "北京","street": "中關村"}
    }# 寫入JSON文件
    with open('user_info.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)  # ensure_ascii=False保證中文正常顯示# 讀取JSON文件
    with open('user_info.json', 'r', encoding='utf-8') as f:loaded_data = json.load(f)print("讀取到的數據:", loaded_data)
    
  • 案例2(稍復雜的json讀入和寫出)

    import json# 復雜JSON數據
    company = {"company_name": "科技公司","departments": [{"name": "研發部","employees": [{"id": 101, "name": "張工程師", "position": "高級工程師"},{"id": 102, "name": "李程序員", "position": "初級工程師"}],"budget": 1500000},{"name": "市場部","employees": [{"id": 201, "name": "王經理", "position": "市場總監"}],"budget": 800000}],"founded": "2010-01-15"
    }# 寫入文件
    with open('company_data.json', 'w', encoding='utf-8') as f:json.dump(company, f, ensure_ascii=False, indent=4)# 讀取并查詢特定信息
    with open('company_data.json', 'r', encoding='utf-8') as f:data = json.load(f)print(f"公司名稱: {data['company_name']}")print("部門信息:")for dept in data['departments']:print(f"{dept['name']}: {len(dept['employees'])}名員工, 預算: {dept['budget']}元")
    

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

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

相關文章

NodeJS 8 ,從 0 到 1:npm 包發布與更新全流程指南( 含多場景適配與踩坑總結 )

目錄 前言 一、準備工作 1.1 開發環境搭建 1.1.1 環境安裝 1.1.2 配置問題 1.2 賬號注冊 1.2.1 賬號注冊(兩種方式) 1.2.2 登錄驗證 1.2.3 個人設置 1.2.4 安全配置 1.3 初始配置 1.3.1 初始項目目錄 1.3.2 關鍵字段詳解 1.3.3 手動完善 二…

BERT中文預訓練模型介紹

bert-base-chinese 是由谷歌基于 BERT(Bidirectional Encoder Representations from Transformers)模型預訓練得到的適用于中文任務的模型版本。以下從多個方面對其進行詳細解釋: 模型概述 BERT 是一種基于 Transformer 架構的預訓練語言模型…

Archon01-項目部署

Archon01-項目部署當前已經參考B站視頻針對代碼進行修改,可直接使用BigModel智譜的GLM-4.5替換openAI進行使用,部署環境(Python3.12-slim環境)1-核心知識點關鍵字: Docker Supabase Archon BigModel Python1&#xff0…

HarmonyOS時間戳完全指南:DevEco Studio中的時間處理與實戰應用

時間戳是現代應用開發中不可或缺的基礎功能,無論是日志記錄、數據同步、緩存管理還是狀態追蹤都離不開時間戳的支持。本文將深入探討在DevEco Studio中如何處理和使用時間戳,并提供豐富的實戰示例。一、時間戳基礎概念什么是時間戳?時間戳&am…

論文筆記:On the Biology of a Large Language Model

《關于大型語言模型的生物學》(On the Biology of a Large Language Model)的文章,深入探究了 Anthropic 公司 Claude 3.5 Haiku 模型的內部工作機制。研究人員將理解語言模型比作生物學研究,旨在揭示其復雜行為背后的“神經回路”…

TCP/IP、HTTP 和 HTTPS簡介

我們來系統地介紹一下 TCP/IP、HTTP 和 HTTPS。它們之間的關系可以概括為:??HTTP 和 HTTPS 是運行在 TCP/IP 基礎網絡架構之上的具體應用協議??。為了更直觀地理解它們之間的關系,我們可以參考下面的網絡分層模型:flowchart TDsubgraph A…

【30】C#實戰篇——獲取路徑下的文件名(不包含路徑和擴展名),文件名由連續的數字編號+連續的字母編號組成,并分離出文件名數字部分和英文部分

文章目錄1 要求2 分析 與 實現1 要求 寫一個函數,獲取路徑下的文件名(不包含路徑和擴展名),并分離出文件名fileName ,文件名編號SN,文件名前綴WMT ; 輸入文件路徑,解析出不帶"…

EasyExcel部署Docker缺少字體報錯

報文 java.lang.NullPointerException: nullat sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)at sun.awt.FontConfiguration.init(FontConfiguration.java:107)at sun.awt.…

從“收款工具”到“智能中樞”:AI如何重構POS系統的技術架構與商業價值?

引?:從交易終端到智能中樞的?字路? 在現代商業的繁忙圖景中 ,銷售點( Point of Sale, POS) 系統?期以來被視為交易流程的終點 ——?個簡單完成收款、打印票據的?具。然? ,這?認知正在被迅速顛覆。 隨著數字經濟的深 化 ,POS系統已演變為連接顧客、 商品與服務的…

unity以戰斗截圖并加上微信二維碼分享

開發游戲時,會遇到戰斗結算,成就等獎勵界面,鼓勵玩家分享到朋友圈,這時通常會在圖片上加上一些內容,比如游戲Logo,二維碼下載等內容。現在分享一下我制作游戲分享圖片的過程。第一步首先截圖,截…

新手向:實現驗證碼程序

本文將從零開始,通過一個簡單的驗證碼程序。即使你沒有任何編程基礎,也能跟著這篇文章一步步學習。第一章:Java開發環境搭建1.1 安裝JDK要開始Java編程,首先需要安裝Java開發工具包(JDK)。JDK是Java開發的核心環境,包含…

使用Flask實現接口回調地址

使用Flask實現接口回調地址 一、接口回調的基本概念 接口回調(Callback)是一種異步通信機制,當某個事件發生時(如支付完成、任務結束),服務提供方會主動調用預先配置的URL(即回調地址&#xff0…

vue2+jessibuca播放h265視頻

文檔地址&#xff1a;http://jessibuca.monibuca.com/api.html#background 1,文件放在public中 2,在html中引入 3&#xff0c;子組件 <template><div :id"container id"></div> </template><script> export default {props: [url,…

Behavioral Fingerprinting of Large Language Models

Behavioral Fingerprinting of Large Language Models Authors: Zehua Pei, Hui-Ling Zhen, Ying Zhang, Zhiyuan Yang, Xing Li, Xianzhi Yu, Mingxuan Yuan, Bei Yu Deep-Dive Summary: 行為指紋識別大型語言模型 摘要 當前的大型語言模型&#xff08;LLMs&#xff09;基…

某互聯網大廠的面試go語言從基礎到實戰的經驗和總結

### 一面 #### 1. **實習項目**- 可以簡要描述你的項目經歷&#xff0c;最好是與職位相關的項目。如果是與技術棧相關的項目&#xff0c;比如 Go、C、Golang 或 Python&#xff0c;重點講述項目中的技術細節和你如何解決問題。#### 2. **Go學習多久**- 說明你學習 Go 語言的時間…

掌握Java控制流:編程決策的藝術

控制流語句是用來 控制程序執行順序 的關鍵工具&#xff0c;它們允許你根據不同的條件執行不同的代碼塊&#xff0c;或者重復執行某段代碼。這使得程序能夠根據輸入和情況做出智能的決策&#xff0c;而不僅僅是線性的執行。1. 條件語句 (Conditional Statements)條件語句允許你…

Docker 安裝 MySQL 和 Redis 完整指南

前言 在開發環境中,使用 Docker 安裝數據庫服務是一種快速、便捷的方式。本文將詳細介紹如何在 macOS 上使用 Docker 安裝 MySQL 和 Redis,并解決國內網絡訪問 Docker Hub 的問題。 環境準備 macOS 系統 Docker Desktop 已安裝 網絡連接 配置 Docker 國內鏡像源 方法一:通…

Spring Boot---自動配置原理和自定義Starter

1.自動配置原理2.自定義starter①dmybatis-spring-boot-autoconfigure步驟一&#xff1a;先創建項目步驟二&#xff1a;導入響應的依賴步驟三&#xff1a;創建自動配置的配置類步驟四&#xff1a;創建配置文件項目結構②dmybatis-spring-boot-starter步驟一&#xff1a;先創建項…

【后端】MySQL 常用 SQL 語句大全

整理一份 MySQL 常用 SQL 語句大全&#xff0c;從基礎操作到進階查詢&#xff0c;都涵蓋。方便日常開發和學習參考。1. 數據庫操作-- 查看所有數據庫 SHOW DATABASES;-- 創建數據庫 CREATE DATABASE db_name;-- 刪除數據庫 DROP DATABASE db_name;-- 使用數據庫 USE db_name;--…

[iOS] 單例模式的深究

文章目錄前言一、什么是單例模式二、單例模式的優缺點優點缺點三、模式介紹1.懶漢模式&#xff08;GCD & 互斥鎖&#xff09;GCD 寫法互斥鎖寫法&#xff08;雙重檢查鎖&#xff09;2.餓漢模式總結懶漢式 互斥鎖&#xff08;Mutex&#xff09;**懶漢式 GCD (dispatch_onc…