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

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.mrgr.cn/news/63053.html

相关文章:

  • 746.使用最小花费爬楼梯
  • 区块链-C++挖矿软件XMRIG源码分析
  • 拍拍贷鸿蒙版H5容器之路
  • 动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙
  • 聊一聊Qt中的按钮
  • 7.线性规划的应用和及Excel求解的注意事项
  • HTML 事件
  • 深入理解 Java UUID 五个版本的区别及使用场景
  • PMP–知识卡片--项目经理领导风格
  • Partition架构
  • 荒野大嫖客:救赎 MagicRDR拆包工具简体中文汉化版1.3.6.3
  • Edge 浏览器特别好用的几个插件
  • 【JS学习】04. JS基础语法-函数
  • 18.网工入门篇--------今天介绍下广域网技术
  • Mysql的行锁,改一行锁一行
  • Golang | Leetcode Golang题解之第524题通过删除字母匹配到字典里最长单词
  • 采用STM32CubeMX和HAL库的模数转换器应用实例
  • C# 广播技术——发现局域网设备技术——
  • 计算机的错误计算(一百四十)
  • C语言指针和数组相关习题
  • Python中如何处理异常情况?
  • C++算法练习-day30——111.二叉树的最小深度
  • C++算法练习-day29——104.二叉树的最大深度
  • C语言 | Leetcode C语言题解之第523题连续的子数组和
  • Podman+Minikube:MacBook 运行 Kubernetes 最佳实践
  • vmvare启动freebsd操作系统密码忘记了怎么办?