当前位置: 首页 > 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中的异常处理,以及主动抛出异常,希望大家多多练习.

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

更多优质文章点这里

http://www.lryc.cn/news/307377.html

相关文章:

  • 如何实现三维模型在网页/手机端/APP上的展示与分享?
  • SpringBoot项目在进行部署打包的时候,打包成jar和war有何差异?
  • ARM系列 -- 虚拟化(四)
  • QT GUI编程常用控件学习
  • 【Python从入门到进阶】49、当当网Scrapy项目实战(二)
  • flutter build ipa 打包比 xcode archive 打出的ipa包大
  • B端系统:巧妙地容错和防错设置,减少用户操作错误
  • BIO实战、NIO编程与直接内存、零拷贝深入辨析
  • PDF文件转换为图片
  • 【Java程序设计】【C00317】基于Springboot的智慧社区居家养老健康管理系统(有论文)
  • Vue3前端实现一个本地消息队列(MQ), 让消息延迟消费或者做缓存
  • 普中51单片机学习(8*8LED点阵)
  • Python 实现Excel自动化办公(上)
  • DayDreamInGIS 之 ArcGIS Pro二次开发 图层属性中换行符等特殊字符替换
  • RK3568平台 RTC时间框架
  • 番外篇 | YOLOv5+DeepSort实现行人目标跟踪检测
  • 认识Sass
  • YOLOv9-Openvino和ONNXRuntime推理【CPU】
  • AIGC 架构:RAG (retrieval augumented generation) 应用可以使用 PostgreSQL 作为向量数据库组件吗?
  • leetcode:134.加油站
  • uniapp的微信小程序授权头像昵称(最新版)
  • Spring Boot到底是如何进行自动配置的?
  • 【王道数据结构】【chapter7查找】【P285t5】
  • 个人玩航拍,如何申请无人机空域?
  • ChatGPT带火的HBM是什么?
  • 10 款数据恢复软件功能和有效性对比(2024 年更新)
  • Python 与 pdfplumber:高效自动读取 PDF 的解决方案
  • Flutter 启动流程解析
  • 全量知识系统问题及SmartChat给出的答复 之4
  • Java架构师之路七、大数据:Hadoop、Spark、Hive、HBase、Kafka等