042.Python异常处理_异常捕获

无奋斗不青春

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

分隔线

异常捕获

    • 异常捕获
      • 异常捕获语法结构
        • 方案1:try...except...else...finally...
        • 方案二:with语句

异常捕获

异常捕获语法结构

方案1:try…except…else…finally…
  • 语法结构
    try可能出现异常的代码# (这里不管会抛出多少个异常,从上往下检测,检测到一个就立即往下去匹配,不会多次检测)
    except 要捕获的异常类别1 as 接收异常的形参1:对这个异常进行处理1
    except 要捕获的异常类别2 as 接收异常的形参2:对这个异常进行处理2
    .
    .
    .
    except 要捕获的异常类别n as 接收异常的形参n:对这个异常进行处理n
    [else:没出现异常时做的处理]
    [finally不管有没有出现异常,都会执行这一部分代码]# except 要捕获的异常类别 as 接收异常的形参:
    # 这一句在Python2.x版本中可以用","替换语句中的as
    # 但是Python3.x版本不能再用",",只能使用as
    
  • 注意:
    • try语句没有捕获到异常,先执行try代码段,再执行else,最后执行finally
    • 如果try语句捕获到异常,先执行except处理错误,再执行finally
    • 如果异常名称不确定,有想要捕捉,可以直接写Exception
  • 示例
    # 写法一
    try:# 1 / 0print(name)
    except ZeroDivisionError as e:print('出现除零异常', e)
    except NameError as e:print('出现名称异常', e)
    else:print('么有出现异常')
    finally:print('不管是否有异常,都执行')# 写法二
    try:# 1 / 0print(name)
    except (ZeroDivisionError, NameError) as e:
    # try部分捕获到的异常类型到这个元组里面进行循环查找print('出现了异常', e)
    else:print('么有出现异常')
    finally:print('不管是否有异常,都执行')# 写法三
    # 写法二
    try:# 1 / 0print(name)
    except Exception as e:print('出现了异常', e)
    else:print('么有出现异常')
    finally:print('不管是否有异常,都执行')
    
方案二:with语句
  • with 语句用于异常处理,封装了try…except…finally编码范式,提高了易用性

  • 作用

    • 适用于执行某一段代码A之前进行预处理,执行代码A结束后,进行清理操作。不管出现了什么异常,最终都要执行一些清理操作
    • 比如:文件操作with open(file) as f语句,不管是否抛出异常,都会自动执行f.close()关闭文件
  • 语法

    with context_expression [as target(s)]:with-body# context_expression    # 上下文表达式
    # with-body             # 语句体# 上下文表达式:要求必须要返回一个“上下文管理器”的表达式
    # 上下文管理器:实现了“上下文协议”的对象
    # 上下文协议:必须要实现`__enter__()`(进入)方法和`__exit__()`(退出)方法
    
  • 执行流程

    1、context_expression上下文表达式要返回一个上下文管理器对象
    2、调用“上下文管理器”的__enter__()方法
    3、如果写了as target语句,则把__enter__()方法的返回值赋值给target
    4、执行 语句体
    5、执行“上下文管理器”的__exit__()方法
    
    • 在这里插入图片描述
  • with语句示例

  • 示例前提解析

    # 文件读取操作正常步骤# 1、打开文件   f = open('xxxx.xx')# 2、读取文件   f.readlines()   ---> 如果这一行代码抛出异常,就会影响后续“文件关闭”操作的执行# 3、关闭文件   f.close()
    
    • 整个文件操作步骤中,如果读取文件操作抛出异常,则会影响后续的文件关闭操作,导致文件无法关闭
    • 于是,我们想保证,不管读取文件有没有异常,都要关闭文件
  • 使用try...except语句解决

    try:打开文件读取文件
    except Exception:异常处理
    finally:关闭文件
    
    • 使用try...except语句解决写法过于繁琐,如果有几十个文件操作,就要写几十遍try...except语句
  • 使用with语句解决

    with open(file) as f:读取文件# open(file) 是上下文表达式,会返回一个“上下文管理器”
    # 执行“上下文管理器”的__enter__()方法
    # 将__enter__()方法的返回值(文件对象)赋值给f
    # 执行 读取文件 操作
    # 执行“上下文管理器”的__exit__()方法(在__exit__()方法内封装了文件关闭操作)
    
  • with语句问题点

  • 上述代码中并不能捕获异常也没有做异常处理,仅仅是做了自动的文件关闭操作

  • 要捕获异常,就要给读取文件操作套上try语句

    with open(file) as f:try:读取文件except Exception:print('捕获异常,异常处理')
    
  • 要捕获异常,也可以通过自定义上下文管理器来捕获

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot前后端分离开发项目部署时,项目打包准备工作

第一步:项目打包之前,拉前后端代码 拉完代码后,再执行下面操作(确保项目能正常启动并运行) 后端(执行如下操作) mvn clean install -T 8 -Dmaven.test.skiptrue -Dmaven.compile.forktrue 执行…

JDK17 SpringBoot3 整合常见依赖

JDK版本&#xff1a;17 SpringBoot 整合Mybatis Plus 、Redis等 依赖文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&q…

【python】程序运行添加命令行参数argparse模块用法详解

Python标准库之argparse&#xff0c;详解如何创建一个ArgumentParser对象及使用 一. argparse介绍二. 使用步骤及参数介绍三. 具体使用3.1 设置必需参数3.2 传一个参数3.3 传多个参数3.4 位置参数和可选参数3.5 参数设置默认值3.6 其它用法 一. argparse介绍 很多时候&#xff…

Amazon CodeWhisperer 在 vscode 的应用

文章作者:旧花阴 CodeWhisperer 是一款可以帮助程序员更快、更安全地编写代码的工具&#xff0c;可以在他们的开发环境中实时提供代码建议和推荐。亚马逊云科技发布的这款代码生成工具 CodeWhisperer 最大的优势就是对于个人用户免费。以在 vscode 为例&#xff0c;演示安装过程…

LeetCode 1901. 寻找峰值 II:二分查找

【LetMeFly】1901.寻找峰值 II&#xff1a;二分查找 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-a-peak-element-ii/ 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat &#xff0c…

【漏洞复现】CVE-2023-6895 IP网络对讲广播系统远程命令执行

漏洞描述 杭州海康威视数字技术有限公司IP网络对讲广播系统。 海康威视对讲广播系统3.0.3_20201113_RELEASE(HIK)存在漏洞。它已被宣布为关键。该漏洞影响文件/php/ping.php 的未知代码。使用输入 netstat -ano 操作参数 jsondata[ip] 会导致 os 命令注入。 开发语言:PHP 开…

原子学习笔记3——使用tslib库

一、tslib介绍 tslib 是专门为触摸屏设备所开发的 Linux 应用层函数库&#xff0c;并且是开源。 tslib 为触摸屏驱动和应用层之间的适配层&#xff0c;它把应用程序中读取触摸屏 struct input_event 类型数据&#xff08;这是输入设备上报给应用层的原始数据&#xff09;并进行…

2023-2024-2Java面向对象程序设计-阶段性测试2

填空题&#xff08;总分&#xff1a;10.00&#xff09; 1、Java程序中使用【 import 】关键字导入外部的包。 2、使用【 final 】关键字声明的类不能有子类。 4、JVM是【 Java Virtual Machine 】的英文简写。 5、面向对象编程思想的三个特性是【封装】、【继承】、【多态】。 …

数据分析师的职业规划与参考资料

数据分析师如何规划 参考&#xff1a;超详细的数据分析职业规划 一个产品的出现可以从业务和技术两个方向分析&#xff0c;业务需求技术支持产品的出现。 如果把职业也当成一个产品&#xff0c;也有类似的分析&#xff0c; 其中业务也就是领域&#xff0c;即这个业务领域的特点…

Power BI案例-医院数据集的仪表盘制作

数据集描述 医生数据集doctor 医生编号是唯一的&#xff0c;名称会存在重复 医疗项目数据projects 病例编号是唯一的&#xff0c;注意这个日期编号不是真正的日期。 日期数据date 这里的日期编号对应医疗项目数据中的日期编号 科室数据集Department 维度表 采购成本事实表…

知乎上高频提问:Redis到底是单线程还是多线程程序?

1.概述 这里我们先给出问题的全面回答&#xff1a;Redis到底是多线程还是单线程程序要看是针对哪个功能而言&#xff0c;对于核心业务功能部分(命令操作处理数据)&#xff0c;Redis是单线程的&#xff0c;主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的&#xff…

海康rtsp拉流,rtmp推流,nginx部署转flv集成

海康rtsp拉流&#xff0c;rtmp推流&#xff0c;nginx部署转flv集成 项目实际使用并测试经正式使用无问题&#xff0c;有问题欢迎评论留言 核心后台java代码&#xff1a; try {// FFmpeg命令String command "ffmpeg -re -i my_video.mp4 -c copy -f flv rtmp://localho…

[学习笔记]批量迁移数据库文件

拷贝数据库文件 首先在本地运行如下SQL语句&#xff0c;查看数据库文件的磁盘位置 SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files默认是保存在C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA目录下 首先复制数据…

Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

目录 一、ansible概述 1、简介 2、Ansible主要功能&#xff1a; 3、Ansible的另一个特点&#xff1a;所有模块都是幂等性 4、Ansible的优点&#xff1a; 5、Ansible的四大组件&#xff1a; 二、ansible环境部署&#xff1a; 1、环境&#xff1a; 2、安装ansible&#…

浅析RoPE旋转位置编码的远程衰减特性

为什么 θ i \theta_i θi​的取值会造成远程衰减性 旋转位置编码的出发点为&#xff1a;通过绝对位置编码的方式实现相对位置编码。 对词向量 q \boldsymbol{q} q添加绝对位置信息 m m m&#xff0c;希望找到一种函数 f f f&#xff0c;使得&#xff1a; < f ( q , m ) …

MySQL数据库——SQL语法

Structured Query Language&#xff08;结构化查询语言&#xff09;&#xff0c;简称SQL&#xff0c;是用于操作关系型数据库的标准编程语言。SQL提供了一种与数据库交互的方式&#xff0c;可以用于查询、插入、更新和删除数据库中的数据。 1. SQL通用语法 SQL语句可以写在一…

持续集成交付CICD:K8S 手动完成前端项目应用发布与回滚

目录 一、实验 1.环境 2.Harbor查看镜像与连接K8S节点 3.K8S集群部署 nginx-ingress-controller 4. Jenkins 通过GitLab共享库 实现前端项目镜像构建 5.K8S node节点拉取镜像 6.K8S master节点更新部署文件 7.前端项目应用回滚 一、实验 1.环境 &#xff08;1&#x…

Android 架构 - 组件化

一、概念 组件化是对单个功能进行开发&#xff0c;使得功能可以复用。将多个功能组合起来就是一个业务模块&#xff0c;因此去除了模块间的耦合&#xff0c;使得按业务划分的模块成了可单独运行的业务组件。&#xff08;一定程度上的独立&#xff0c;还是依附于整个项目中&…

EXCEL VLOOKUP函数

参考资料 Excel&#xff1a;史上最全的VLOOKUP应用教程VLOOKUP函数最全面最详细的讲解大全&#xff0c;涵盖17个重要和常见用法&#xff01; 目录 零. 前提条件一. 单条件查找1.1 顺向查找1.2 逆向查找 二. 多条件查找2.1 顺向查找2.2 逆向查找 三. 根据条件查询等级四. 交差查…

RHCE8 资料整理(十一)

RHCE8 资料整理 第 32 章 控制语句32.1 判断语句 when32.1.1 when 判断中>、<、!和的使用32.1.2 when 判断中 in的用法32.1.3 when 判断中 is的用法 32.2 判断语句 block-rescue32.3 循环语句 第 32 章 控制语句 一个play中可以包含多个task&#xff0c;如果不想所有的t…