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

news2024/12/23 6:59:41

Python基础编程之错误和异常

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

概念

错误

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

异常

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

常见的系统异常

  1. 除零异常:ZeroDivisionError

  2. 名称异常:NameError

  3. 类型异常

  4. 索引异常

  5. 键异常

  6. 值异常

  7. 属性异常

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

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

异常的解决

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

预防

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

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

输出:

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

捕捉处理异常

在这里插入图片描述

# 之后执行第一个异常
try:
    1/0
    print(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/0
    print(name)
except (ZeroDivisionError,NameError) as z:
    print("xxx", z)
else:
    print("123")
finally:
    print("最后执行的内容,到时候,不管是否会出现异常,都会执行的语句")

输出:

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

# 当不知道是什么异常时,写一个Exception即可
try:
    1/0
    print(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:
        yield
    except 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 = msg
        
    pass

def 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 = msg
        
    pass

def 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.coloradmin.cn/o/2229386.html

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

相关文章

使用 Elastic、OpenLLMetry 和 OpenTelemetry 跟踪 LangChain 应用程序

作者&#xff1a;来自 Elastic Bahubali Shetti Langchain 应用程序的使用正在增长。构建基于 RAG 的应用程序、简单的 AI 助手等的能力正在成为常态。观察这些应用程序更加困难。考虑到现有的各种选项&#xff0c;本博客展示了如何将 OpenTelemetry 检测与 OpenLLMetry 结合使…

b站小土堆PyTorch视频学习笔记(二)

Dataloader:提供不同类型的数据集&#xff1b;为后面的网络提供不同的数据形式 Dataset&#xff1a;提供一种方式去获取数据及其label&#xff08;标签&#xff09; 主要实现以下两个功能&#xff1a; {如何获取每一个数据及其lable&#xff1b;告诉我们总共有多少数据} fr…

操作系统实验记录

实验零:虚拟机安装 一、安装vmware虚拟机 与vmware匹配搜索结果 - 考拉软件 (rjctx.com),下载17.5.1版本即可下载后对照教程安装 二、下载iso虚拟驱动 搜索清华大学镜像网站,点击再搜ubuntu,下载这个4.1GB的iso文件安装后打开vmware虚拟机 三、配置vmware虚拟机 右键管…

【YOLO 系列】基于YOLO的行人口罩检测系统【python源码+Pyqt5界面+数据集+训练代码】

前言 在当前全球公共卫生形势下&#xff0c;戴口罩已成为预防呼吸道疾病传播的重要措施。然而&#xff0c;确保每个人都遵守这一规定仍然是一项挑战。为了提高公共场合的口罩佩戴合规性&#xff0c;我们开发了基于YOLO V8的行人口罩检测系统。该系统利用深度学习技术&#xff…

SpringBoot节奏:Web音乐网站构建手册

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

《Python游戏编程入门》注-第4章2

《Python游戏编程入门》的“4.2.2 键盘事件”中介绍了通过键盘事件来监听键盘按键的方法。 1 键盘事件 玩家点击键盘中某个按键实际上包含了两个动作&#xff1a;点击按键和释放按键&#xff0c;也就是按键按下和松开。按键按下的对应的事件是KEYDOWN&#xff0c;按键松开对应…

ifuse挂载后,在python代码中访问iOS沙盒目录获取app日志

上一次使用pymobiledevice3&#xff0c;在python代码中访问app的沙盒目录并分析业务日志&#xff0c;在使用过程中发现&#xff0c;在获取app日志的时候速度很慢&#xff0c;执行时间很长&#xff0c;需要30-61秒&#xff0c;所以这次尝试使用libimobiledevic和ifuse&#xff0…

Vue2指令原理手写

文件结构 index.js /** Author: RealRoad* Date: 2024-10-31 17:13:50* LastEditors: Do not edit* LastEditTime: 2024-10-31 17:15:57* Description: * FilePath: \project_10_08\vite-project\src\testVue\index.js*/ import Vue from ./Vue.js window.VueVue Vue.js imp…

信而泰防火墙安全测试解决方案:为网络安全保驾护航

在当今数字化时代&#xff0c;网络安全至关重要。防火墙作为网络安全的第一道防线&#xff0c;其性能和可靠性直接影响到网络的安全性。信而泰提供的防火墙安全测试解决方案&#xff0c;旨在通过全面的测试流程&#xff0c;确保防火墙能够高效、准确地执行其安全任务。 针对防火…

我在命令行下剪辑视频

是的&#xff0c;你不需要格式工厂&#xff0c;你也不需要会声会影&#xff0c;更不需要爱剪辑这些莫名其妙的流氓软件&#xff0c;命令行下视频处理&#xff0c;包括剪辑&#xff0c;转码&#xff0c;提取&#xff0c;合成&#xff0c;缩放&#xff0c;字幕&#xff0c;特效等…

攻防世界5

cgpwn2 发现是32位文件 打开main函数发现hello双击进入 这里我们发现栈溢出了&#xff0c;双击name 我们发现了bss 发现这题的system有点问题&#xff0c;后门需要我们自己输入&#xff0c;刚好有bss我们直接用它 知道system的地址 exp: from pwn import * context(oslinux,a…

vue项目中如何在路由变化时增加一个进度条

在 Vue.js 项目中&#xff0c;使用路由&#xff08;如 Vue Router&#xff09;时&#xff0c;为了提升用户体验&#xff0c;你可能会想要在路由变化时显示一个进度条。这可以通过多种方式实现&#xff0c;其中一种流行的做法是使用第三方库&#xff0c;如 vue-loading-bar 或 n…

红米K70至尊版修复“nv损坏”主板电阻图示 mtk芯片工程固件刷写与步骤说明

💝💝💝红米K70至尊版 机型代码:rothko,搭载天玑9300+旗舰芯片.后置5000万像素索尼IMX906高动态OIS主摄,800万像素超广角镜头,200万像素微距镜头,前置2000万像素摄像头,也适用于以下型号的小米机型:2407FPN8EG, 2407FPN8ER, XIG06, A402XM, 2407FRK8EC。 💝💝…

qt QSlider详解

1、概述 QSlider是Qt框架中的一个控件&#xff0c;它允许用户通过拖动滑块来选择一个范围内的值。这个控件在用户界面中非常常见&#xff0c;通常用于调整音量、亮度、进度等需要连续数值输入的场景。QSlider提供了水平和垂直两种方向&#xff0c;可以根据需要选择合适的方向。…

D54【python 接口自动化学习】- python基础之模块与标准库

day54 第三方模块的使用 学习日期&#xff1a;20241031 学习目标&#xff1a;模块与标准库 -- 69 第三方模块的使用&#xff1a;如何使用其他人编写的代码&#xff1f; 学习笔记&#xff1a; 第三方模块的安装 虚拟环境 加速第三方模块的安装 总结 第三方模块使用pip命令进…

Python毕业设计选题:基于Django+Vue的图书馆管理系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 图书馆界面 图书信息界面 个人中心界面 后台登录界面 管理员功能界面 用户…

李跳跳 2.4 | 最新蓝色版,附加3000条规则

李跳跳是一款非常好用的可以跳过广告的神器&#xff0c;今天软件已经更新到了2.4最新的蓝色版本&#xff0c;支持更多的规则&#xff0c;能够为你全面地去除广告。李跳跳是一款十分实用的去除广告工具软件&#xff0c;软件的开屏广告都可以在这里一键去除&#xff0c;而且软件是…

做反向代购,采购订单应该怎么批量管理?

在反向代购这片充满商机的蓝海中&#xff0c;代购企业们正驾驶着各自的航船&#xff0c;奋力驶向成功的彼岸。然而&#xff0c;当订单如繁星点点般密布在夜空中时&#xff0c;如何高效地管理这些采购订单&#xff0c;便成为了决定船只是否能平稳前行的关键。 想象一下&#xff…

【分布式技术】分布式事务深入理解

文章目录 概述产生原因关键点 分布式事务解决方案3PC3PC的三个阶段&#xff1a;3PC相比于2PC的改进&#xff1a;3PC的缺点&#xff1a; TCCTCC事务的三个阶段&#xff1a;TCC事务的设计原则&#xff1a;TCC事务的适用场景&#xff1a;TCC事务的优缺点&#xff1a;如何解决TCC模…

字符串逆序(c语言)

错误代码 #include<stdio.h>//字符串逆序 void reverse(char arr[], int n) {int j 0;//采用中间值法//访问数组中第一个元素和最后一个元素//交换他们的值&#xff0c;从而完成了字符串逆序//所以这个需要临时变量for (j 0; j < n / 2; j){char temp arr[j];arr[…