【Python实战系列】一文彻底搞懂异常捕获及处理(理论+源码)

一、问题

    异常处理是Python中一种用于处理程序运行时错误的机制。在编写代码时,可能会出现各种不可预测的情况,例如除零错误、文件不存在、网络连接问题等等。为了确保程序能够在出现错误时正常运行,您可以使用异常处理机制来捕获和处理这些异常。Python中的异常处理使用tryexcept语句来实现。

二、try/except

捕获指定异常

try:# 可能引发异常的代码result = 10 / 0  # 除零错误
except ZeroDivisionError:# 处理异常的代码print("除零错误发生")

在这个示例中,try块中包含可能引发异常的代码,如果发生除零错误,将会触发ZeroDivisionError异常,然后控制流将转移到except块中,其中包含了处理异常的代码。

捕获所有异常

try:# 可能引发异常的代码result = 10 / 0  # 除零错误
except:# 处理异常的代码print("异常发生")

在这个示例中,try块中包含可能引发异常的代码,如果发生异常错误,然后控制流将转移到except块中,其中包含了处理异常的代码。

捕获多个指定异常

try:<语句>
except (<异常名1>, <异常名2>, ...):print('异常说明')

在这个示例中,一个 except 同时处理多个异常,不区分异常的优先级且对所有类型的异常采取同样的处理。

try:<语句>
except <异常名1>:print('异常说明1')
except <异常名2>:print('异常说明2')
except <异常名3>:print('异常说明3')

在这个示例中,执行 try 下的语句,如果引发异常,则执行过程会跳到第一个 except 语句。如果第一个 except 中定义的异常与引发的异常匹配,则执行该 except 中的语句。如果引发的异常不匹配第一个 except,则会搜索第二个 except,依次类推。

三、try/except/else

    在tryexcept之间添加一个else块,其中包含在没有异常发生时要执行的代码。

try:<语句>
except <异常名1>:print('异常说明1')
except <异常名2>:print('异常说明2')
else:<语句> # try语句中没有异常则执行此段代码

四、try/except/else/finally

    在tryexcept之后添加一个finally块,其中包含无论是否发生异常都要执行的代码。

str1 = 'hello world'
try:int(str1)
except IndexError as e:pass
except KeyError as e:print(e)
except ValueError as e:print(e)
else:print('try内没有异常')
finally:print('无论异常与否,都会执行我')

五、抛出自定义异常try/raise

自定义抛出异常

try:age = int(input("请输入年龄:"))if age < 0:raise ValueError("年龄不能为负数")
except ValueError as e:print(e)

上述代码中,如果输入的年龄为负数,将抛出自定义的ValueError异常。

本人读研期间发表5篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,对Python有一定认知和理解,会结合自身科研实践经历不定期分享关于python、机器学习、深度学习等基础知识与应用案例。

致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。

1、关注“数据杂坛”公众号,即可在后台联系我获取相关数据集和源码。

2、关注“数据杂坛”公众号,点击“领资料”即可免费领取资料书籍。

3、有论文指导相关需求,点击“联系我”添加作者微信直接交流。

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

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

相关文章

K8S学习指南(5)-k8s核心对象namespace

文章目录 前言什么是Namespace&#xff1f;Namespace的类型创建Namespace使用kubectl创建Namespace示例 切换Namespace查看Namespace在Namespace中部署应用程序使用Namespace进行资源隔离Namespace的权限控制删除Namespace总结 前言 Kubernetes&#xff08;简称K8s&#xff09…

前端知识(十六)——js获取时间戳方法

1、获取当前时间 let date new Date() 2、将字符串或者对象直接转化成时间戳 方法&#xff1a;Date.parse() 注意&#xff1a;不推荐这种方法&#xff0c;毫秒级别的数值被转化为000 3、通过valueOf()函数返回指定的原始值获得精准的时间戳值 方法&#xff1a;valueOf()…

git自动更新功能

确认权限 因为一般Linux系统网页用的www 或 www-data用户和用户组,所以要实现自动来去,首先要在www用户权限下生成ssh密钥,不然没有权限,其次就是,要把用root用户拉去的代码,批量改成www用户 1. 给www权限 vi /etc/sudoers www ALL=(ALL) NOPASSWD:/bin/chow…

memset的用法

语法 1.引用所需头文件 #include<string.h> 2.声明 void * memset ( void * ptr, int value, size_t num ); ptr 表示要设置的数据的起始地址。如果是要设置整个数组的数据&#xff0c;那ptr就是数组名&#xff08;数组首元素的地址&#xff09; value 表示要设置的值…

【学习笔记】lyndon分解

摘抄自quack的ppt。 这部分和 s a sa sa的关联比较大&#xff0c;可以加深对 s a sa sa的理解。 Part 1 如果字符串 s s s的字典序在 s s s以及 s s s的所有后缀中是最小的&#xff0c;则称 s s s是一个 lyndon \text{lyndon} lyndon串。 lyndon \text{lyndon} lyndon分解&a…

c++ 类和对象-封装意义一

属性和行为作为整体 示例一&#xff1a;设计一个圆类&#xff0c;求圆的周长 #include<iostream> using namespace std; //圆周率 const double PI 3.14; //设计一个圆类&#xff0c;求圆的周长 //圆求周长的公式&#xff1a;2*PI*半径 //class代表设计一个类&#xf…

熔池处理Tecplot 360 和CFD-Post做出一样的效果

熔池处理Tecplot 360 和CFD-Post做出一样的效果 效果展示详细讲述Tecplot 360实现过程分析实现过程第一步实现过程第二步界面美化注意点效果展示 详细讲述Tecplot 360实现过程 分析 这里主要是将体积分数大于0.5的区域抽取出来,然后显示温度场,所以这里主要考虑下面连个思考…

PCL 三维点云中求解圆的三维方程

一、概述 在给出的三维点云中求解拟合圆的三维方程 二、代码示例 #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/sample_consensus/ransac.h> #include <pcl/sample_consensus/sac_model_circle3D.h> // 拟

【贪心算法】 Opponents

这道题写伪代码就好了&#xff01; Description Arya has n opponents in the school. Each day he will fight with all opponents who are present this day. His opponents have some fighting plan that guarantees they will win, but implementing this plan requires pr…

【开源】基于Vue+SpringBoot的固始鹅块销售系统

项目编号&#xff1a; S 060 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S060&#xff0c;文末获取源码。} 项目编号&#xff1a;S060&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固…

Mybatis-plus中wrapper的区别

在MyBatis-Plus框架中,LambdaQueryWrapper 和 QueryWrapper 是用于构建查询条件的两个主要类。它们都是查询条件构造器,用于在查询中生成 WHERE 子句的条件。 QueryWrapper QueryWrapper 是 MyBatis-Plus 3.x 中引入的条件构造器。它的主要特点是使用字符串作为字段名,并支…

python 数字保留小数位数 结果是字符串

precision 2 f{px :.{precision}f} # 自定义动态 f{x:.2f} 数字 转 字符串 保留dot后面的位数 结果 字符串

从关键新闻和最新技术看AI行业发展(2023.11.20-12.3第十一期) |【WeThinkIn老实人报】

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&…

MySQL概述-安装与启动

数据库相关概念 MySQL数据库 下载地址 MySQL :: Download MySQL Installer (Archived Versions) 启动方法 启动密令&#xff1a;net start mysql80 停止密令&#xff1a;net stop mysql80 客户端链接方法 注意用系统自带的命令行工具执行指令需要设置环境在高级系统设置中…

解决使用pnpm安装时Sharp模块报错的方法

在使用pnpm进行项目依赖安装的过程中&#xff0c;有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块&#xff0c;但它的安装可能会因为各种原因而失败&#xff0c;导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…

Linux-帮助命令的使用和练习(type、man、help、info详解)

目录 5.3.1 type-判断是否为内部命令 5.3.2 man-查看详细文档 5.3.3 help-查看shell内部命令的帮助信息 5.3.4 --help-查看系统外部命令帮助信息 5.3.5 info-查看info格式的帮助指令 5.3.6 /usr/share/doc-存储软件包的文档信息 平时我们看到的命令大多数都可以查看帮助文…

NTP反射放大攻击

文章目录 什么是NTPNTP反射放大攻击解决方案搭建NTP服务器部署服务器端windows NTP命令行本机测试 部署客户端ntpdatechrony 实验Python利用脚本 什么是NTP 基于UDP协议的NTP&#xff08;网络时间协议&#xff09;&#xff1a;使网络中各个计算机时间同步的一种协议 用途&…

vue3-vite前端快速入门教程 vue-element-admin

Vue3快速入门学习 初始化项目 # 创建项目 npm create vitelatest my-vue-app -- --template vue # 安装依赖 npm i # 运行 npm run dev 模板语法 文本插值​ 最基本的数据绑定形式是文本插值&#xff0c;它使用的是“Mustache”语法 (即双大括号)&#xff1a; <span&g…

【数据结构】——排序篇(中)

前面我们已经了解了几大排序了&#xff0c;那么我们今天就来再了解一下剩下的快速排序法&#xff0c;这是一种非常经典的方法&#xff0c;时间复杂度是N*logN。 快速排序法&#xff1a; 基本思想为&#xff1a;任取待排序元素序列中的某元素作为基准值&#xff0c;按照该排序码…

C++ queue 和priority_queue

目录 1.什么是queue 2.模拟实现 3.仿函数 模板参数Compare 仿函数 4.什么是priority_queue 模拟实现 1.什么是queue 1.队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端提取元素。 2.队列作为…