当前位置: 首页 > news >正文

零基础学python之高级编程(4)---python异常类型及其类型处理

python异常类型及其类型处理

文章目录

  • python异常类型及其类型处理
  • 前言
  • 一、异常的概念
  • 二、异常类型
    • 1.捕获异常方法
    • 2.主动抛出异常
  • 总结


前言

我们在日常学习中或者在开发一个项目时,一定会出现的问题就是报错,今天我们就学习错误类型的种类以及错误类型的处理方法


一、异常的概念

当我们在编写程序的时候,python解释器遇到错误的时候会停止程序运行,然后返回错误的信息,这就是出现异常的行为.
程序停止运行后提示错误信息后,我们称这个行为为抛出异常.

二、异常类型

在python中异常分为,python内置异常,模块内部异常,以及自定义抛出异常

以下是python中内置异常

	BaseException  # 所有异常的基类
+-- SystemExit  # 解释器请求退出
+-- KeyboardInterrupt  # 用户中断执行(通常是输入^C)+-- GeneratorExit  # 生成器(generator)发生异常来通知退出+-- Exception  # 常规异常的基类+-- StopIteration  # 迭代器没有更多的值+-- StopAsyncIteration  # 必须通过异步迭代器对象的__anext__()方法引发以停止迭代+-- ArithmeticError  # 各种算术错误引发的内置异常的基类|    +-- FloatingPointError  # 浮点计算错误|    +-- OverflowError  # 数值运算结果太大无法表示|    +-- ZeroDivisionError  # 除(或取模)零 (所有数据类型)+-- AssertionError  # 当assert语句失败时引发+-- AttributeError  # 属性引用或赋值失败+-- BufferError  # 无法执行与缓冲区相关的操作时引发+-- EOFError  # 当input()函数在没有读取任何数据的情况下达到文件结束条件(EOF)时引发+-- ImportError  # 导入模块/对象失败|    +-- ModuleNotFoundError  # 无法找到模块或在在sys.modules中找到None+-- LookupError  # 映射或序列上使用的键或索引无效时引发的异常的基类|    +-- IndexError  # 序列中没有此索引(index)|    +-- KeyError  # 映射中没有这个键+-- MemoryError  # 内存溢出错误(对于Python 解释器不是致命的)+-- NameError  # 未声明/初始化对象 (没有属性)|    +-- UnboundLocalError  # 访问未初始化的本地变量+-- OSError  # 操作系统错误,EnvironmentError,IOError,WindowsError,socket.error,select.error和mmap.error已合并到OSError中,构造函数可能返回子类|    +-- BlockingIOError  # 操作将阻塞对象(e.g. socket)设置为非阻塞操作|    +-- ChildProcessError  # 在子进程上的操作失败|    +-- ConnectionError  # 与连接相关的异常的基类|    |    +-- BrokenPipeError  # 另一端关闭时尝试写入管道或试图在已关闭写入的套接字上写入|    |    +-- ConnectionAbortedError  # 连接尝试被对等方中止|    |    +-- ConnectionRefusedError  # 连接尝试被对等方拒绝|    |    +-- ConnectionResetError    # 连接由对等方重置|    +-- FileExistsError  # 创建已存在的文件或目录|    +-- FileNotFoundError  # 请求不存在的文件或目录|    +-- InterruptedError  # 系统调用被输入信号中断|    +-- IsADirectoryError  # 在目录上请求文件操作(例如 os.remove())|    +-- NotADirectoryError  # 在不是目录的事物上请求目录操作(例如 os.listdir())|    +-- PermissionError  # 尝试在没有足够访问权限的情况下运行操作|    +-- ProcessLookupError  # 给定进程不存在|    +-- TimeoutError  # 系统函数在系统级别超时+-- ReferenceError  # weakref.proxy()函数创建的弱引用试图访问已经垃圾回收了的对象+-- RuntimeError  # 在检测到不属于任何其他类别的错误时触发|    +-- NotImplementedError  # 在用户定义的基类中,抽象方法要求派生类重写该方法或者正在开发的类指示仍然需要添加实际实现|    +-- RecursionError  # 解释器检测到超出最大递归深度+-- SyntaxError  # Python 语法错误|    +-- IndentationError  # 缩进错误|         +-- TabError  # Tab和空格混用+-- SystemError  # 解释器发现内部错误+-- TypeError  # 操作或函数应用于不适当类型的对象+-- ValueError  # 操作或函数接收到具有正确类型但值不合适的参数|    +-- UnicodeError  # 发生与Unicode相关的编码或解码错误|         +-- UnicodeDecodeError  # Unicode解码错误|         +-- UnicodeEncodeError  # Unicode编码错误|         +-- UnicodeTranslateError  # Unicode转码错误+-- Warning  # 警告的基类+-- DeprecationWarning  # 有关已弃用功能的警告的基类+-- PendingDeprecationWarning  # 有关不推荐使用功能的警告的基类+-- RuntimeWarning  # 有关可疑的运行时行为的警告的基类+-- SyntaxWarning  # 关于可疑语法警告的基类+-- UserWarning  # 用户代码生成警告的基类+-- FutureWarning  # 有关已弃用功能的警告的基类+-- ImportWarning  # 关于模块导入时可能出错的警告的基类+-- UnicodeWarning  # 与Unicode相关的警告的基类+-- BytesWarning  # 与bytes和bytearray相关的警告的基类+-- ResourceWarning  # 与资源使用相关的警告的基类。被默认警告过滤器忽略。

还有requests 模块内置异常

requests模块中包含以下内置的异常类:

1. requests.RequestException:所有requests模块中的异常的基类。2. requests.HTTPError:HTTP错误异常,继承自requests.RequestException。当HTTP请求返回的状态码不是200时,会引发这个异常。3. requests.ConnectionError:连接错误异常,继承自requests.RequestException。当请求url时出现网络问题时,会引发这个异常。4. requests.Timeout:超时异常,继承自requests.RequestException。当请求超时时,会引发这个异常。5. requests.TooManyRedirects:重定向次数过多异常,继承自requests.RequestException。当重定向次数超过设定的最大次数时,会引发这个异常。6. requests.SSLError:SSL证书验证错误异常,继承自requests.RequestException。当请求url时SSL证书验证失败时,会引发这个异常。这些异常类在requests模块中经常被用来捕获和处理请求过程中可能发生的异常情况。

1.捕获异常方法

try:# 可能引发异常的代码
except 异常类型1:# 处理异常的代码
except 异常类型2:# 处理异常的代码finally:无论出不出现异常都会执行的代码
...

例如:

try:num = int(input("请输入整数:"))result = 8 / numprint(result)
except ValueError:print("请输入正确的整数")
except ZeroDivisionError:print("除 0 错误")
except Exception as result:print("未知错误 %s" % result)
else:print("正常执行")
finally:print("执行完成,但是不保证正确")

我们如果不知道 会出现什么错误类型,我们可以python中Exception异常类
然后输出异常结果.

except Exception as result:print("未知错误 %s" % result)

2.主动抛出异常

我们可以用raise 异常信息来进行抛出异常,在try 中函数就会抛出’除数不能为零’的异常.

def divide(x, y):if y == 0:raise ZeroDivisionError("除数不能为零")return x / ytry:result = divide(10, 0)
except ZeroDivisionError as e:print(e)

当我们学习raise主动抛出异常后我们可以 在合适的时候,主动抛出异常,以满足要求.

示例:

def input_password():# 1. 提示用户输入密码pwd = input("请输入密码:")# 2. 判断密码长度,如果长度 >= 8,返回用户输入的密码if len(pwd) >= 8:return pwd# 3. 密码长度不够,需要抛出异常# 1> 创建异常对象 - 使用异常的错误信息字符串作为参数ex = Exception("密码长度不够")# 2> 抛出异常对象raise extry:user_pwd = input_password()print(user_pwd)
except Exception as result:print("发现错误:%s" % result)

总结

这里面部分示例取自于这位大佬的文章

仅进行学习和参考.

今天我们学习了在python中的异常处理,以及主动抛出异常,希望大家多多练习.

讲的不好,多多见谅,我们下次再见!

更多优质文章点这里

相关文章:

零基础学python之高级编程(4)---python异常类型及其类型处理

python异常类型及其类型处理 文章目录 python异常类型及其类型处理前言一、异常的概念二、异常类型1.捕获异常方法2.主动抛出异常 总结 前言 我们在日常学习中或者在开发一个项目时,一定会出现的问题就是报错,今天我们就学习错误类型的种类以及错误类型的处理方法 一、异常的概…...

如何实现三维模型在网页/手机端/APP上的展示与分享?

在四维轻云平台中,只需要简单几步,就能轻松实现三维模型在网页/手机端/APP上的交互展示,也可分享转发给他人进行在线查看。 1、注册登录 打开四维轻云官网,完成注册并登录。 2、创建项目 在【项目管理】中点击“新建项目”按钮…...

SpringBoot项目在进行部署打包的时候,打包成jar和war有何差异?

首先给大家来讲一个我们遇到的一个奇怪的问题: 我的一个springboot项目,用mvn install打包成jar,换一台有jdk的机器就直接可以用java -jar 项目名.jar的方式运行,没任何问题,为什么这里不需要tomcat也可以运行了? 然…...

ARM系列 -- 虚拟化(四)

今天来看看虚拟中断。 在一个非虚拟化的系统中,操作系统可以直接访问GIC的寄存器,并且处理GIC的物理中断接口(physical interrupt interface)。 但是在一个虚拟化的系统中,不是这样。Guest OS并不知道它运行在虚拟系…...

QT GUI编程常用控件学习

1 GUI编程应该学什么 2 QT常用模块结构 QtCore: 包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、流、URLs、mime类文件、进程与线程一起使用 QtGui: 包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类 QtWidgets: 包含了一些列创建桌面应用的UI元素…...

【Python从入门到进阶】49、当当网Scrapy项目实战(二)

接上篇《48、当当网Scrapy项目实战(一)》 上一篇我们正式开启了一个Scrapy爬虫项目的实战,对当当网进行剖析和抓取。本篇我们继续编写该当当网的项目,讲解刚刚编写的Spider与item之间的关系,以及如何使用item&#xff…...

flutter build ipa 打包比 xcode archive 打出的ipa包大

为什么 flutter build ipa 打包比 xcode archive 打出的ipa包大? 如果你用Flutter构建的.ipa文件比通过Xcode Archive构建的.ipa文件要大,这可能是因为Flutter构建了一个包含了多平台的二进制文件的通用包。这意味着在Flutter构建的.ipa中包含了所有的C…...

B端系统:巧妙地容错和防错设置,减少用户操作错误

Hi,大家好,我是大美B端工场,从事8年前端开发的老司机。很多B端系统体验不好,让用户非常茫然或者容易出错,大大降低了操作体验,本文着重分析B端系统的容错机制该如何设计,欢迎老铁们关注、评论、…...

BIO实战、NIO编程与直接内存、零拷贝深入辨析

BIO实战、NIO编程与直接内存、零拷贝深入辨析 长连接、短连接 长连接 socket连接后不管是否使用都会保持连接状态多用于操作频繁,点对点的通讯,避免频繁socket创建造成资源浪费,比如TCP 短连接 socket连接后发送完数据后就断开早期的http服…...

PDF文件转换为图片

现在确实有很多线上的工具可以把pdf文件转为图片,比如smallpdf等等,都很好用。但我们有时会碰到一些敏感数据,或者要批量去转,那么需要自己写脚本来实现,以下脚本可以提供这个功能~ def pdf2img(pdf_dir, result_path…...

【Java程序设计】【C00317】基于Springboot的智慧社区居家养老健康管理系统(有论文)

基于Springboot的智慧社区居家养老健康管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的智慧社区居家养老健康管理系统设计与实现,本系统有管理员、社区工作人员、医生以及家属四种角色权限 管…...

Vue3前端实现一个本地消息队列(MQ), 让消息延迟消费或者做缓存

MQ功能实现的具体代码(TsMQ.ts): import { v4 as uuidx } from uuid;import emitter from /utils/mitt// 消息类 class Message {// 过期时间,0表示马上就消费exp: number;// 消费标识,避免重复消费tag : string;// 消息体body : any;constr…...

普中51单片机学习(8*8LED点阵)

8*8LED点阵 实验代码 #include "reg52.h" #include "intrins.h"typedef unsigned int u16; typedef unsigned char u8; u8 lednum0x80;sbit SHCPP3^6; sbit SERP3^4; sbit STCPP3^5;void HC595SENDBYTE(u8 dat) {u8 a;SHCP1;STCP1;for(a0;a<8;a){SERd…...

Python 实现Excel自动化办公(上)

在Python 中你要针对某个对象进行操作&#xff0c;是需要安装与其对应的第三方库的&#xff0c;这里对于Excel 也不例外&#xff0c;它也有对应的第三方库&#xff0c;即xlrd 库。 什么是xlrd库 Python 操作Excel 主要用到xlrd和xlwt这两个库&#xff0c;即xlrd是读Excel &am…...

DayDreamInGIS 之 ArcGIS Pro二次开发 图层属性中换行符等特殊字符替换

具体参考ArcMap中类似的问题&#xff0c;本帖开发一个ArcGISPro版的工具 1.基础库部分 插件开发&#xff0c;经常需要处理图层与界面的交互。基础库把常用的交互部分做了封装&#xff0c;方便之后的重复使用。 &#xff08;1&#xff09;下述类定义了数据存储结构&#xff0…...

RK3568平台 RTC时间框架

一.RTC时间框架概述 RTC&#xff08;Real Time Clock&#xff09;是一种用于计时的模块&#xff0c;可以是再soc内部&#xff0c;也可以是外部模块。对于soc内部的RTC&#xff0c;只需要读取寄存器即可&#xff0c;对于外部模块的RTC&#xff0c;一般需要使用到I2C接口进行读取…...

番外篇 | YOLOv5+DeepSort实现行人目标跟踪检测

前言:Hello大家好,我是小哥谈。DeepSort是一种用于目标跟踪的深度学习算法。它结合了目标检测和目标跟踪的技术,能够在视频中准确地跟踪多个目标,并为每个目标分配一个唯一的ID。DeepSort的核心思想是将目标检测和目标跟踪两个任务进行联合训练,以提高跟踪的准确性和稳定性…...

认识Sass

sass中文文档&#xff1a; Sass: Sass 文档 1. sass的安装步骤 1. 卸载冲突的Node.js (1) winR输入control,找到电脑上的卸载软件&#xff0c;找到Node.js&#xff0c;右键”卸载” (2) winR输入cmd,输入命令:node -v查看结果。 如果提示: node 不…...

YOLOv9-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…...

AIGC 架构:RAG (retrieval augumented generation) 应用可以使用 PostgreSQL 作为向量数据库组件吗?

是的&#xff0c;RAG&#xff08;检索增强生成&#xff09;应用程序可以绝对地使用 PostgreSQL 作为向量数据库&#xff01;事实上&#xff0c;它是一个流行的选择&#xff0c;因为有以下几个优点&#xff1a; 使用 PostgreSQL 和 pgvector 的优点&#xff1a; 集成解决方案&…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...