当前位置: 首页 > 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; 集成解决方案&…...

通用ADC芯片测试:其TSSOP16、QFN16封装与德诺嘉电子芯片测试座角色应用

在车规级电子&#xff08;如车载传感器、电池管理系统&#xff09;与医疗电子&#xff08;如便携式诊断设备、生命体征监测仪器&#xff09;领域&#xff0c;通用ADC&#xff08;模数转换&#xff09;芯片作为模拟信号与数字信号的“桥梁”&#xff0c;其性能直接决定设备的数据…...

大师之上,再造大师:玲珑轮胎“三个向上”战略的深度解码

4月16日&#xff0c;玲珑大师二代轮胎如约而至。这不仅仅是一款新品的亮相&#xff0c;更是玲珑轮胎在五十年发展长河中&#xff0c;对“中国第一&#xff0c;世界一流”这一目标的又一次庄严兑现。 玲珑轮胎总裁周令坤在发布会上&#xff0c;将玲珑的战略路径凝练为“三个向上…...

Cherry Studio下载安装与小白使用教程:Windows电脑轻松上手AI助手

Cherry Studio下载安装与小白使用教程&#xff1a;Windows电脑轻松上手AI助手 作为一名每天都要处理大量文字和代码的打工人&#xff0c;最近我一直在寻找一个能集成各种大模型的桌面端工具。毕竟网页版切来切去真的很麻烦。试了一圈&#xff0c;最后我被 Cherry Studio 给安利…...

两道必掌握的动态规划面试题:最长回文子串 最长公共子序列

目录 一、最长回文子串&#xff08;Longest Palindromic Substring&#xff09; 题目描述 1. 暴力解法&#xff08;时间复杂度 O (n)&#xff09; 2. 中心扩展法&#xff08;时间复杂度 O (n)&#xff0c;空间 O (1)&#xff09; 核心思路 Java 代码实现 3. 动态规划解法…...

告别万年历芯片!用STM32F4的RTC+BKP寄存器实现数据记录与事件时间戳(附代码)

用STM32F4的RTCBKP构建高精度事件日志系统 在嵌入式设备开发中&#xff0c;记录关键事件的时间戳是许多应用场景的刚需。无论是工业设备的故障诊断、医疗仪器的操作审计&#xff0c;还是智能家居的用户行为分析&#xff0c;精确的时间标记都至关重要。传统方案往往依赖外部RTC芯…...

远程工作骗局:隐形加班——软件测试从业者的专业困境与破局之道

在数字浪潮席卷全球的今天&#xff0c;远程办公、混合工作制已成为包括软件测试行业在内的许多技术领域的“新常态”。它许诺了时间自由、通勤解放与生活平衡&#xff0c;一时间风靡无数职场人。然而&#xff0c;在这看似美好的工作模式背后&#xff0c;一个日益严峻且极具隐蔽…...

Qt QTreeView性能优化实战:告别QTreeWidget和QStandardItemModel,手写自定义Model提升10倍加载速度

Qt QTreeView性能优化实战&#xff1a;手写自定义Model实现万级数据秒加载 在开发需要展示海量数据的桌面应用时&#xff08;比如日志分析工具、文件管理器或配置管理系统&#xff09;&#xff0c;QTreeView控件配合QStandardItemModel或QTreeWidget的方案往往会遇到明显的性能…...

2026实用论文降AI工具盘点:含免费版高效去AI痕迹方案

写论文的苦谁懂?熬了几个通宵赶出来的稿子,要么查重飘红一片,要么AI检测直接标红高危,改到凌晨三点还是过不了关。 为了搞定论文降AIGC,我前前后后踩了不下二十个坑,试了市面上几十款降AI率工具,有的改完逻辑混乱像小学生写的,有的AI率没降反而升了,还有的直接把我论…...

THREE.MeshLine材质系统详解:纹理、透明度与颜色混合的完全掌握

THREE.MeshLine材质系统详解&#xff1a;纹理、透明度与颜色混合的完全掌握 【免费下载链接】THREE.MeshLine Mesh replacement for THREE.Line 项目地址: https://gitcode.com/gh_mirrors/th/THREE.MeshLine THREE.MeshLine是Three.js的Mesh替换方案&#xff0c;为开发…...

华为交换机PoE配置保姆级教程:从基础使能到高级功率管理,手把手搞定AP和IPC供电

华为交换机PoE供电实战指南&#xff1a;从零配置到智能管理 当办公室新到一批华为无线AP时&#xff0c;网络工程师小张发现这些设备需要依赖交换机的PoE供电功能。与传统网络设备不同&#xff0c;PoE&#xff08;Power over Ethernet&#xff09;技术允许通过网线同时传输数据和…...