Python课堂16——异常查找及处理
文章目录
- 前言
- 一、异常是什么?
- 二、异常处理
- 1. 根据提示
- 2. 捕获异常
- 3.抛出异常——raise
- 4.应用场景
- 总结
前言
我们在日常编写代码的时候,难免会遇到一些不可控的错误,这无疑会导致程序的终止,大大降低了程序的实用性,那么我们如何能优化这种情况呢?接下俩就让我们来详细了解一下吧!
一、异常是什么?
在Python中,异常是指在程序执行过程中出现的错误或意外情况。当Python解释器遇到异常时,会中断当前的执行流程,并尝试寻找异常处理程序来处理异常。如果找不到合适的异常处理程序,程序将终止并打印出错误信息。
分类
-
语法错误:
syntaxerror:代码不符合Python语法规定
ZeroDivisionError:除数为0
KeyError:字典中不存在这个键
AttributeError:对象没有这个属性
TypeError:类型错误,传入的类型不匹配
ImportError:无法引入模块或包,基本上是路径问题或名称错误 -
逻辑错误
nameerror:使用一个还没有被定义的变量
indexerror:下标/索引超出范围
IOError:输入/输出操作错误,基本上是无法打开文件(比如你要读的文件不存在)
ValueError:传入的值有误
二、异常处理
1. 根据提示
traceback找出错误点,并改正
xxxError:会显示异常的类型,以及具体的提示
2. 捕获异常
要保证程序的容错性和可靠性,遇到错误不直接崩溃,而是有对应的异常机制处理
- 捕获异常一
语法:
try:
被检测的代码块
except 异常类型 as e:
检测到异常要执行的代码块
代码如下:
a = int(input('请输入第一个数字:'))
b = int(input('请输入第二个数字:'))
try:print(a/b)
except ZeroDivisionError as error:print(error)print('您输入的数据有误!')
# 执行的原理:执行try里的子代码块,如果字代码块没有触发异常,直接跳过except语句,try语句执行完毕
# 如果执行try发生异常,则跳过异常语句,执行except语句,except和指定的异常类型进行匹配,匹配成功就执行except代码,如果匹配不成功,异常没有捕获到,输出错误。
- 捕获异常二
try检测的代码块出现了两个或多个异常,可以用多个except进行匹配,或者把多个异常类型放在一个元组内,用一个except匹配
代码如下:
try:a = int(input('请输入第一个数字:'))b = int(input('请输入第二个数字:'))print(a / b)
except (ZeroDivisionError, ValueError) as error:print(error)print('您输入的数据有误!')
except ValueError as e:print(e) # invalid literal for int() with base 10: '10.0'
- 捕获异常三
程序在执行出现错误的时候,出现逻辑错误,不能确定具体是什么逻辑错误,万能异常 Exception 代表所有异常类型
作用:能捕获到大多数的异常,但是不能捕获语法错误
代码如下:
try:li = [1, 2, 3]print(li[0])a = int(input('请输入第一个数字:'))b = int(input('请输入第二个数字:'))print(a / b)
except Exception as e:print(e)
注意Exception的首字母必须要大写,不能捕获语法异常
- 捕获异常四
当检测的代码块没有出现任何异常的时候,执行else代码
代码如下:
try:name = 'a'print(name)print(int('10'))print(float(10.14))
except Exception as e:print(e)
else:print('程序没有出现错误')
- 捕获异常五
不管有没有检测到异常,都会执行 finally
代码如下:
'''语法:try:被检测的代码块except 异常类型 as e:检测到异常要执行的代码块else:没有捕获到异常执行的代码finally:无论是否有异常都会执行注意:finally和try可以单独连用作用:回收资源的操作,关闭已经打开的文件,关闭打开的数据库
'''try:name = 'a'print(name)print(int('10'))print(float(10.14))
except Exception as e:print(e)
else:print('程序没有出现错误')
finally:print('不管是否异常都会执行') # 一般做一些文件的关闭
3.抛出异常——raise
前面都是不符合Python解释器的语法,由解释器抛出异常。我们也可以自己定义异常,在满足什么条件下主动抛出。
语法:
1.创建Exception(‘错误的信息’)
2.raise抛出即可
e = Exception(‘错误’)
raise e
代码如下:
def login():count = 0while True:username = input('请输入账号')code = input('请输入验证码')if code == '123456':count += 1if count == 5:e = Exception('验证码输入错误超过五次,请一分钟后重试')raise e
try:login()
except Exception as e:print(e)
4.应用场景
- 写程序:打开了一个文件,对文件执行读写操作,过程中遇到一些逻辑错误,引发了异常,通过try except进行捕获,注意写程序:打开了一个文件,对文件执行读写操作,过程中遇到一些逻辑错误,引发了异常,通过try except进行捕获。
代码如下:
def func():li = []return li[0]
func()
try:func()
except Exception as e:print(e)# 函数:处理某一个功能的代码,异常捕获是给该函数唯一增加的功能
- 利用异常捕获来检查和简写代码
代码如下:
def func():while True:name = input('请输入账号名:')if len(name) < 10: # 正确逻辑if name == 'Abner':print('账号名输入正确')breakelse:print('请重新输入')else:print('请重新输入')def func():while True:name = input('请输入账号名:')if len(name) > 10:print('请重新输入')continueif name == 'Abner':print('账号名输入正确')break
总结
本节主要讲述了写代码过程中出现的错误以及解决方法,这就为我们之后的代码编写中提供了一个新的思路。
美好的一天,上帝不会就这样给你,需要自己去创造。
相关文章:
Python课堂16——异常查找及处理
文章目录 前言一、异常是什么?二、异常处理1. 根据提示2. 捕获异常3.抛出异常——raise4.应用场景 总结 前言 我们在日常编写代码的时候,难免会遇到一些不可控的错误,这无疑会导致程序的终止,大大降低了程序的实用性,…...
任务书参考答案-模块1任务一
1.根据网络拓扑图所示,按照IP 地址规划表,对防火墙的名称、各接口IP 地址进行配置。共8 分,每错1 处(行)扣1 分,扣完为止。地址、安全域、接口(状态为UP)、名称都正确。 2.根据网络拓扑图所示,按照IP 地址规划表,对三层交换机的名称进行配置,创建VLAN 并将相应接口划…...
2023最新盲盒交友脱单系统源码
源码获取方式 搜一搜:万能工具箱合集 点击资源库直接进去获取源码即可 如果没看到就是待更新,会陆续更新上 或 源码软件库 最新盲盒交友脱单系统源码,纸条广场,单独抽取/连抽/同城抽取/高质量盒子 新增功能包括心动推荐ÿ…...
Half-Band filter(半带滤波器)
Half-Band filter 引言正文symmetric half-band filtersamplitude half-band filterspower half-band filters引言 今天看文章的时候遇到了一个名词,Half-Band filter,中文名称半带滤波器,特来记录一下。 正文 假设我们通过采样获取到的信号带宽为 f s f_s...
2024年环境安全科学、材料工程与制造国际学术会议(ESSMEM2024)
【EI检索】2024年环境安全科学、材料工程与制造国际学术会议(ESSMEM2024) 会议简介 我们很高兴邀请您参加将在三亚举行的2024年环境安全科学、材料工程和制造国际学术会议(ESSMEM 2024)。 ESSMEM2024将汇集世界各国和地区的研究人员&…...
常用路径规划算法简介及python程序
目录 1、前言2、D*算法2.1简介2.2优缺点2.2.1 优点2.2.2 缺点 2.3 python程序 3、A*算法3.1 优缺点:3.1.1 优点:3.1.2 缺点: 3.2 python程序 4、人工势场算法4.1优缺点4.1.1优点:4.1.2缺点: 4.2 python程序 5、Dijkstr…...
计算x的对数math.log(x)math.log(x, a)math.log2(x)math.log10(x)
【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算x的对数 math.log(x) math.log(x, a) math.log2(x) math.log10(x) [太阳]选择题 以下说法错误的是() import math print("【执行】e math.exp(1)") e …...
Golin 弱口令/漏洞/扫描/等保/基线核查的快速安全检查小工具
下载地址: 链接:https://pan.quark.cn/s/db6afba6de1f 主要功能 主机存活探测、漏洞扫描、子域名扫描、端口扫描、各类服务数据库爆破、poc扫描、xss扫描、webtitle探测、web指纹识别、web敏感信息泄露、web目录浏览、web文件下载、等保安全风险问题风险…...
【JavaEE】_HttpServlet类
目录 1. init方法 2. destory方法 3. service方法 4. servlet生命周期 前文已经提及到:servlet是tomcat提供的,用于操作HTTP协议的一组API,可以将这组API理解为HTTP服务器的框架; 编写一个servlet程序,往往都要继…...
11-pytorch-使用自己的数据集测试
b站小土堆pytorch教程学习笔记 import torch import torchvision from PIL import Image from torch import nnimg_path ../imgs/dog.png imageImage.open(img_path) print(image) # imageimage.convert(RGB)transformtorchvision.transforms.Compose([torchvision.transforms.…...
数据安全之路:深入了解MySQL的行锁与表锁机制
欢迎来到我的博客,代码的世界里,每一行都是一个故事 数据安全之路:深入了解MySQL的行锁与表锁机制 前言基础innodb中锁与索引的关系如何避免表锁 前言 在当今数据密集的应用中,数据库锁成为了确保数据一致性和并发操作的关键工具…...
【深度学习】Pytorch 教程(十二):PyTorch数据结构:4、张量操作(3):张量修改操作(拆分、拓展、修改)
文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor(张量)1. 维度(Dimensions)2. 数据类型(Data Types)3. GPU加速(GPU Acceleration) 2、张量的数学运算1. 向量运算2. 矩阵…...
适合新手博主站长使用的免费响应式WordPress博客主题JianYue
这款JianYue主题之所以命名为 JianYue,意思就是简单而不简约的。是根据Blogs主题优化而成,剔除了一些不必要的功能及排版,仅保留一种博客布局,让新手站长能够快速手上WordPress。可以说这款主题比较适合新手博主站长使用ÿ…...
FPGA OSERDESE2
Output Parallel-to-Serial Logic Resources (OSERDESE2) OSERDESE2 在Xilinx 7 系列器件是一款专用的并行至串行转换器,具有特定的时钟和逻辑资源,旨在促进高速源同步接口的实现。每个OSERDESE2模块都包括一个专用的数据串行器和 3 状态控制。数据和 3 态串行器都可以在 SD…...
如何卸载Erlang以及RabbitMQ
参考以下两篇文章 https://blog.csdn.net/m0_49605579/article/details/130196536 Windows如何完全卸载RabbitMQ和Erlang_删除注册表hkey_local_machine\software\ericsson\erlang\e-CSDN博客 首先我是按照链接一的操作进行了卸载,但是Erlang的安装目录一直删除不…...
ros自定义action记录
文章目录 自定义action1. 定义action文件2. 修改 package.xml3. 修改 CMakeLists.txt4. 运行 catkin build5. simple_action_server.py6. simple_action_client.py 测试 自定义action ros 版本:kinetic 自定义test包的文件结构如下 |-- test | |-- CMakeLists.t…...
挑战30天学完Python:Day18 正则表达式
📘 Day 18 🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点…...
力扣● 343. 整数拆分 ● 96.不同的二叉搜索树
● 343. 整数拆分 想不到,要勇于看题解。 关键在于理解递推公式。 1、DP数组及其下标的含义:dp[i]是分解i这个数得到的最大的乘积。 2、DP数组如何初始化:dp[0]和dp[1]都没意义,所以直接不赋值,初始化dp[2]1即可。…...
游戏同步+游戏中的网络模块
原文链接:游戏开发入门(九)游戏同步技术_游戏数据同步机制流程怎么开发-CSDN博客 游戏开发入门(十)游戏中的网络模块_游戏开发组网-CSDN博客 3.同步技术的基本常识: a.同步给谁?某个用户&…...
【03】逆序数组
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、逆序函数是什么? 二、逆序函数原码 1.直接逆序 2.创建临时数组逆序 三、结言 💥一、逆序函数是什么? 示例:输入1 4 …...
Postman+Newman自动化测试报告生成全攻略:让微信小程序接口回归测试5分钟搞定
PostmanNewman自动化测试报告生成全攻略:让微信小程序接口回归测试5分钟搞定 在追求研发效能的今天,手工重复执行接口测试已成为效率瓶颈。想象一下:每次微信小程序迭代更新,测试工程师都需要在Postman中逐个点击上百个接口用例&a…...
Vue3-DateTime-Picker:现代化Vue 3日期时间选择器的完整指南
Vue3-DateTime-Picker:现代化Vue 3日期时间选择器的完整指南 【免费下载链接】vue3-date-time-picker Datepicker component for Vue 3 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-date-time-picker 在当今的Web开发中,日期时间选择器是几…...
CentOS LVM实战:动态调整home与root分区空间,解决系统盘爆满难题
1. 当服务器根分区告急时,你该怎么办? 最近接手了一台运行了3年的CentOS服务器,刚登录就发现系统弹出了"磁盘空间不足"的警告。df -h一看,好家伙,根分区(/)已经用了98%,而…...
Rust Trait实现:引用类型自动继承与泛型解决方案
1. 项目概述:Rust Trait实现的“引用陷阱”与泛型解决方案在Rust开发中,我们经常需要为自定义类型实现各种Trait来定义其行为。一个看似理所当然的直觉是:如果类型T实现了TraitSpeaker,那么它的引用&T也应该自动实现Speaker。…...
如何快速上手网易游戏NPK文件解包工具:新手3步完整教程
如何快速上手网易游戏NPK文件解包工具:新手3步完整教程 【免费下载链接】unnpk 解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。 项目地址: https://gitcode.com/gh_mirrors/un/unnpk 你是否对网易游戏如《阴阳师》、《魔法禁书目录》中的…...
FModel:解锁虚幻引擎游戏资源的终极工具指南
FModel:解锁虚幻引擎游戏资源的终极工具指南 【免费下载链接】FModel Unreal Engine Archives Explorer 项目地址: https://gitcode.com/gh_mirrors/fm/FModel 你是否曾好奇过《堡垒之夜》中炫酷的皮肤是如何制作的?或是想要探索《Valorant》中精…...
Taotoken助力初创团队以可控成本集成大模型能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken助力初创团队以可控成本集成大模型能力 为产品添加智能对话功能是许多初创团队提升用户体验的关键一步。然而,…...
TegraRcmGUI完整指南:Windows上最简单快速的Switch注入工具教程
TegraRcmGUI完整指南:Windows上最简单快速的Switch注入工具教程 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是Windows平台上最简…...
运放噪声深度解析:从原理到工程实践的计算与优化
1. 项目概述:为什么我们需要关心运放的噪声?如果你曾经调试过一个高精度的信号调理电路,比如一个微弱的传感器信号放大链路,或者一个高分辨率的ADC前端,你大概率遇到过这样的场景:理论上,你的电…...
CircuitPython嵌入式开发:从代码编辑、串口调试到库管理的完整工作流
1. 从零开始:CircuitPython的嵌入式开发哲学如果你和我一样,是从Arduino或者传统的C语言嵌入式开发转过来的,第一次接触CircuitPython的感觉,大概就像从手动挡汽车换到了电动车。那种“拧钥匙、挂挡、踩离合”的繁琐步骤ÿ…...
