11-Python基础编程之错误和异常

Python基础编程之错误和异常

  • 概念
    • 错误
    • 异常
  • 常见的系统异常
  • 异常的解决
    • 预防
    • 捕捉处理异常
    • with语句
  • 手动抛出异常
  • 自定义异常

概念

错误

可以通过代码进行修复;
在这里插入图片描述

异常

需要提前考虑,设定限制条件;不能通过代码进行修复;
在这里插入图片描述

常见的系统异常

  1. 除零异常:ZeroDivisionError

  2. 名称异常:NameError

  3. 类型异常

  4. 索引异常

  5. 键异常

  6. 值异常

  7. 属性异常

  8. 迭代器异常
    在这里插入图片描述

  9. 系统异常类继承树
    在这里插入图片描述

异常的解决

系统一开始已经内置了一些特定的应用场景:当我们写代码的过程当中,一旦触发了这个场景,系统内部就会自动的向外界抛出这个问题,也就是我们所谓的异常——则程序被终止执行,软件的崩溃。

预防

添加容错代码;
但弊端是,容错代码不属于我们主要的业务逻辑:如果容错代码过多,会造成代码混乱,主业务不清晰。

def divide(x,y):if y != 0:return xprint("除数不能为0,请仔细检査")return 0print(divide(1, 0))

输出:

除数不能为0,请仔细检査
0

捕捉处理异常

在这里插入图片描述

# 之后执行第一个异常
try:1/0print(name)
except ZeroDivisionError as ze:print("xxx", ze)
except NameError as ne:print("名称错误", ne)
else:print("123")
finally:print("最后执行的内容,到时候,不管是否会出现异常,都会执行的语句")

输出:

xxx division by zero
最后执行的内容,到时候,不管是否会出现异常,都会执行的语句

# 或写成元组的形式
try:# 1/0print(name)
except (ZeroDivisionError,NameError) as z:print("xxx", z)
else:print("123")
finally:print("最后执行的内容,到时候,不管是否会出现异常,都会执行的语句")

输出:

xxx name ‘name’ is not defined
最后执行的内容,到时候,不管是否会出现异常,都会执行的语句

# 当不知道是什么异常时,写一个Exception即可
try:1/0print(name)
except Exception as ze:print("xxx", ze)
else:print("123")
finally:print("最后执行的内容,到时候,不管是否会出现异常,都会执行的语句")

输出:

xxx division by zero
最后执行的内容,到时候,不管是否会出现异常,都会执行的语句

with语句

不管出现了什么异常,最终都要执行一些清理操作,适用于执行某一段代码A之前,进行预处理,执行代码A结束后,进行清理操作。
在这里插入图片描述

在这里插入图片描述

with open("xx. jpg",'r')as f:f.readlines()
# 虽然会报错,但是他一定执行了fileclose这个操作,即:
finally:print("xxxx")f. close()

@contextlib.contextmanager:使用装饰器,让一个生成器变成一个"上下文管理器”

# 利用功能包将生成器变为上下文处理器
import contextlib@contextlib.contextmanager
def ze():try:yieldexcept ZeroDivisionError as e:print("error:",e)
x=1
y=0
with ze():x/y

输出:

error: division by zero

手动抛出异常

通过 raise 语句直接抛出相关类型的异常(但必须是BaseException类里的异常)。
自己设计异常模块:

def set_age(age):if age<=0 or age > 200:# print("值错误”)raise ValueError("值错误")else:print("给张三的年龄设置为", age)set_age(-18)

输出:
在这里插入图片描述

自定义异常

class LessZero(Exception):def init (self, msg):self.msg = msgpassdef set_age(age):if age<=0 or age > 200:# print("值错误”)raise LessZero("小于0,错误")else:print("给张三的年龄设置为", age)set_age(-18)

输出:
可以发现是我们设计的自定义异常类型
在这里插入图片描述
若要解决报错,将捕获的异常类型改为我们设置的即可:

class LessZero(Exception):def init (self, msg):self.msg = msgpassdef set_age(age):if age<=0 or age > 200:# print("值错误”)raise LessZero("小于0,错误")else:print("给张三的年龄设置为", age)# set_age(-18)
try:set_age(-18)
except LessZero as e:print("x", e)

输出:

x 小于0,错误

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

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

相关文章

鸿蒙开发融云demo发送图片消息

鸿蒙开发融云demo发送图片消息 融云鸿蒙版是不带UI的&#xff0c;得自己一步步搭建。 这次讲如何发送图片消息&#xff0c;选择图片&#xff0c;显示图片消息。 还是有点难度的&#xff0c;好好看&#xff0c;好好学。 一、思路&#xff1a; 选择图片用&#xff1a;photoVie…

Linux工具(yum/apt,vim)

yum(或apt) Linux中常见的软件的安装方式 : 1. yum/apt 2. rpm 安装包安装 3. 源码安装 yum/apt相当于手机中的各种应用管家 vim指令 vim是一个多模式的编辑器,只用于写代码 刚进入vim默认是命令模式 想要在vim中写代码,必须要进入插入模式 想要退出vim首先必须进入底行…

Java设计模式之代理模式(一)

什么是代理&#xff1f;可以理解为其他对象提供一种代理以控制对这个对象的访问。 举个例子&#xff0c;生活中的外卖平台&#xff0c;店铺是制作外卖的&#xff0c;然后放到平台上售卖。这里的店铺就是真实角色&#xff0c;为了能够让店铺不用担心销售等问题&#xff0c;从而…

各类素材网站下载主题源码 CeoDocs v3.6 开心版

WordPress付费办公素材下载主题 – 各类素材网站下载主题 CeoDocs_v3.6_开心版CeoDocs主题是一款轻量级、 且简洁大气、付费素材下载类型主题&#xff0c;定位于办公素材行业&#xff0c;当然也适用于办公文档、PPT模板、设计素材、 图片素材、音效素材、视频素材各类素材网站…

巨好看的登录注册界面源码

展示效果 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevic…

Redis-发布/订阅交互模式

文章目录 一、消息代理介绍二、Redis中客户端、服务器之间的交互模式介绍三、Redis发布/订阅交互模式的操作 一、消息代理介绍 “消息代理”&#xff08;Message Broker&#xff09;是一种软件组件&#xff0c;它在不同的应用程序之间传递消息。在Redis的上下文中&#xff0c;…

利用Kubernetes原生特性实现简单的灰度发布和蓝绿发布

部分借鉴地址: https://support.huaweicloud.com/intl/zh-cn/bestpractice-cce/cce_bestpractice_10002.html 1.原理介绍 用户通常使用无状态负载 Deployment、有状态负载 StatefulSet等Kubernetes对象来部署业务&#xff0c;每个工作负载管理一组Pod。以Deployment为例&#x…

18.04Ubuntu遇到Unable to locate package

解决办法&#xff1a; 要先升级你的apt Sudo apt-get update

《安全基石:等保测评的全方位解读》

在数字化转型的浪潮中&#xff0c;网络安全已成为企业生存与发展的核心议题。等保测评&#xff0c;作为我国网络安全等级保护制度的重要组成部分&#xff0c;不仅是企业安全的基石&#xff0c;更是推动企业高质量发展的关键。本文将全面解读等保测评的内涵、作用及其对企业的深…

(五)Spark大数据开发实战:灵活运用PySpark常用DataFrame API

目录 一、PySpark 二、数据介绍 三、PySpark大数据开发实战 1、数据文件上传HDFS 2、导入模块及数据 3、数据统计与分析 ①、计算演员参演电影数 ②、依次罗列电影番位前十的演员 ③、按照番位计算演员参演电影数 ④、求每位演员所有参演电影中的最早、最晚上映时间及…

SpringFactoriesLoader

1.什么是SPI (面试题) SPI全名Service Provider interface&#xff0c;翻译过来就是“服务提供接口”&#xff0c;再说简单就是提供某一个服务的接口&#xff0c; 提供给服务开发者或者服务生产商来进行实现。 Java SPI 是JDK内置的一种动态加载扩展点的实现。 这个机制在一…

Apifox 10月更新|测试步骤支持添加脚本和数据库操作、测试场景支持回收站、变量支持「秘密」类型

Apifox 新版本上线啦&#xff01; 看看本次版本更新主要涵盖的重点内容&#xff0c;有没有你所关注的功能特性&#xff1a; 自动化测试模块能力持续升级 测试步骤支持添加「脚本」和「数据库操作」 测试场景和定时任务支持回收站内恢复 定时任务支持设置以分钟频率运行 导入…

「C/C++」C++标准库之#include<fstream>文件流

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

liunx网络套接字 | 实现基于tcp协议的echo服务

前言&#xff1a;本节讲述linux网络下的tcp协议套接字相关内容。博主以实现tcp服务为主线&#xff0c;穿插一些小知识点。以先粗略实现&#xff0c;后精雕细琢为思路讲述实现服务的过程。下面开始我们的学习吧。 ps&#xff1a;本节内容建议了解网络端口号的友友们观看哦。 目录…

uni-app 运行HarmonyOS项目

1. uni-app 运行HarmonyOS项目 文档中心 1.1. HarmonyOS端 1.1.1. 准备工作 &#xff08;1&#xff09;下载DevEco Studio开发工具。   &#xff08;2&#xff09;在 DevEco Studio 中打开任意一个项目&#xff08;也可以新建一个空项目&#xff09;。   &#xff08;3&…

WPF+MVVM案例实战(十三)- 封装一个自定义消息弹窗控件(上)

文章目录 1、案例效果2、功能实现1、创建文件2、资源文件获取3、枚举实现3、弹窗实现1、界面样式实现2、功能代码实现4、总结1、案例效果 2、功能实现 1、创建文件 打开 Wpf_Examples 项目,我们在用户控件类库中创建一个窗体文件 SMessageBox.xaml,同时创建枚举文件夹 Enum…

Unity BesHttp插件修改Error log的格式

实现代码 找到插件的 UnityOutput.cs 然后按照需求替换为下面的代码即可。如果提示 void ILogOutput.Flush() { } 接口不存在&#xff0c;删除这行代码即可。 using Best.HTTP.JSON.LitJson; using System; using System.Collections.Generic; using UnityEngine; using Syst…

Python热化学固态化学模型模拟

&#x1f3af;要点 使用热化学方式&#xff0c;从材料项目数据库获得热力学数据构建固态材料无机合成模拟模型。固态反应网络是热力学相空间的模型&#xff0c;使得能够纳入简单的反应动力学行为。反应坐标图可视为加权有向图&#xff0c;其表示出热力学相空间的密集连接模型。…

详解软件设计中分库分表的几种实现以及应用示例

详解软件设计中分库分表的几种实现以及应用示例https://mp.weixin.qq.com/s?__bizMzkzMTY0Mjc0Ng&mid2247485108&idx1&sn8b3b803c120c163092c70fa65fe5541e&chksmc266aaa1f51123b7af4d7a3113fe7c25daa938a04ced949fb71a8b7773e861fb93d907435386#rd

简缩极化模型+简缩极化求解用优化的方法,也需要保证方程和未知数个数

一个定标器可以得到一个复数矢量&#xff0c;4个实数方程 而模型中我们有&#xff0c;每个定标器有不同的A和φ (两个实数)和相同的R和δc &#xff08;4个复数&#xff09;