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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…